例如,我有一个64位变量a
和一个8位变量b
unsigned long long a = 0x1234567890123456;
unsigned char b = 0x78;
我希望a
成为0x12345678901234 78
我希望a
的最右边8位设置为b
,并保持56位不变,我该怎么办?
a = a & (0xFFffFFffFFffFFff | b); //is this correct?
...
答案 0 :(得分:6)
limits.h
中定义了一个有用的宏,可以帮助它变得可移植。这是CHAR_BIT
。
a = ((a >> CHAR_BIT) << CHAR_BIT) | b;
就是这样。括号中的部分清除了CHAR_BIT
中最不重要的a
,然后可以使用b
进行按位。