C当-1被分配给unsigned short或uint16_t时,编译器会发生什么?

时间:2014-11-25 23:26:10

标签: c casting compilation

所以我知道在C标准中,所有常量都通过层次结构来计算常量的类型。

当将较宽的有符号类型分配给较小的无符号类型时,C标准还讨论了模运算。

我的问题是我什么时候:

unsigned short s = -1;

我知道s包含0xFFFF(简称为-1的带符号表示)。但是,按标准 不是-1是一个int,即0xFFFFFFFF(假设是32位整数),然后被模运算截断,当分配给无符号短s时,得到0xFFFF。我想知道哪种思路是正确的,以获得这种表述?例如,unsigned short s = -32769(现在有0x7ffe)基于对-32769的int表示的模运算(超出了short的范围)0xffff7ffe。

在生成将0xFFFF复制到寄存器的程序集之前,编译器是否已经执行此截断操作?

将类型为0xFFF3的uint16分配给uint8时,类似的问题是定义了此实现还是在标准中定义了截断?

0 个答案:

没有答案