Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 24位数字如何溢出为32位类型?_C - Fatal编程技术网

C 24位数字如何溢出为32位类型?

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

如果我将三个无符号字符打包成一个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 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将一种类型的整型变量视为较小的类型。变量实际类型的结转规则才是重要的。