我得到了一个32位的无符号整数,我正在尝试将该无符号整数中的8个最高有效位保存到一个无符号字符中。然后,我想将这些位清除为0。最后一部分可以用掩码来完成,但我不确定如何准确地找到8个最高有效位,然后让掩码确切地知道要清除哪些位。
另一个相关的问题是,我试图找到最低有效位,并将其左移,使其成为最重要的位,并返回该值。像上面一样,我不确定如何找到最低有效位,然后知道如何将其向左移动
发布于 2020-05-21 07:15:16
您可以编写两个通用函数,其中一个函数返回类型为unsigned character的对象的指定字节,另一个函数返回一个数字,该数字的位被清除后用作参数。
这是一个演示程序。
#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;
}它的输出是
1 2 3 4
0x4030200 0x4030000 0x4000000 0 https://stackoverflow.com/questions/61924081
复制相似问题