如何将64位int的最右边8位设置为char var?

Sat*_*ato 2 c

例如,我有一个64位var a和一个8位charb

unsigned long long a = 0x1234567890123456;
unsigned char b = 0x78;
Run Code Online (Sandbox Code Playgroud)

我想a成为0x12345678901234 78

我想要最右边8位a设置b,并保持56位不变,我该怎么办?

a = a & (0xFFffFFffFFffFFff | b); //is this correct?
Run Code Online (Sandbox Code Playgroud)

??

Sto*_*ica 6

有一个有用的宏定义limits.h,可以帮助使其可移植.是的CHAR_BIT.

a = ((a >> CHAR_BIT) << CHAR_BIT) | b;
Run Code Online (Sandbox Code Playgroud)

就是这样.括号中的部分清除了最不重要CHAR_BIT的部分a,然后可以按位进行逐位处理b.