C 24位数字如何溢出为32位类型?
如果我将三个无符号字符打包成一个32位整数,最高有效字节溢出,它会溢出到32位类型的上8位吗?它只是通过模256减少MSB,而不影响32位类型的上8位吗 编辑:C 24位数字如何溢出为32位类型?,c,C,如果我将三个无符号字符打包成一个32位整数,最高有效字节溢出,它会溢出到32位类型的上8位吗?它只是通过模256减少MSB,而不影响32位类型的上8位吗 编辑: Packed using bit shifting on little endian architecture: unsigned int foo = (msb << 16) | (middle << 8) | lsb; 在little-endian架构上使用位移位进行打包: unsigned int fo
Packed using bit shifting on little endian architecture:
unsigned int foo = (msb << 16) | (middle << 8) | lsb;
在little-endian架构上使用位移位进行打包:
unsigned int foo=(msb因为变量是32位类型,恰好包含24位值,所以24位部分的溢出将上移到25位。因此它将作为正常的32位值
例如:
uint32_t x = 0xFFFFFF;
printf("x=%08x\n", x); // prints 00FFFFFF
x++;
printf("x=%08x\n", x); // prints 01000000
取决于您如何将字符压缩到整数中,最高有效字节如何溢出,以及endianness是什么。您显示的代码行可能会出现符号扩展,但不会溢出。您认为什么操作可能会溢出?唯一的方法是“溢出”如果CHAR\u BIT>=16
,则可能发生。在该操作期间,它如何溢出?唯一可能发生的事情是使用无符号CHAR
类型阻止的符号扩展。是否有任何地方可以解释此行为?对于其他类型也是如此。可能在中。但是,通常情况下,y是否为ou将一种类型的整型变量视为较小的类型。变量实际类型的结转规则才是重要的。