首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:获取最高有效位和最低有效位

C:获取最高有效位和最低有效位
EN

Stack Overflow用户
提问于 2020-05-21 06:37:28
回答 1查看 435关注 0票数 0

我得到了一个32位的无符号整数,我正在尝试将该无符号整数中的8个最高有效位保存到一个无符号字符中。然后,我想将这些位清除为0。最后一部分可以用掩码来完成,但我不确定如何准确地找到8个最高有效位,然后让掩码确切地知道要清除哪些位。

另一个相关的问题是,我试图找到最低有效位,并将其左移,使其成为最重要的位,并返回该值。像上面一样,我不确定如何找到最低有效位,然后知道如何将其向左移动

EN

回答 1

Stack Overflow用户

发布于 2020-05-21 07:15:16

您可以编写两个通用函数,其中一个函数返回类型为unsigned character的对象的指定字节,另一个函数返回一个数字,该数字的位被清除后用作参数。

这是一个演示程序。

代码语言:javascript
复制
#include <stdio.h>
#include <limits.h>

unsigned char extract_byte( unsigned int x, size_t n )
{
    n %= sizeof( x );

    return  x >> CHAR_BIT * n & 0xFF;
}

unsigned int clear_byte( unsigned int x, size_t n )
{
    n %= sizeof( x );

    return x & ~( 0xFF << n * CHAR_BIT );
}

int main(void) 
{
    unsigned int x = 0x04030201;

    for ( size_t i = 0; i < sizeof( x ); i++ )
    {
        printf( "%hhu ", extract_byte( x, i ) );
    }
    putchar( '\n' );

    for ( size_t i = 0; i < sizeof( x ); i++ )
    {
        printf( "%#x ", x = clear_byte( x, i ) );
    }
    putchar( '\n' );

    return 0;
}

它的输出是

代码语言:javascript
复制
1 2 3 4 
0x4030200 0x4030000 0x4000000 0 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61924081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档