所以我知道在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时,类似的问题是定义了此实现还是在标准中定义了截断?