我正在读Jans Gustedt的《现代C》.在一次关于如何确定数字文字类型的讨论中,他写到了将0xFFFFFFFF
赋给signed
变量的常见trap :
常见的错误是试图将十六进制常数赋给有符号的,并期望它表示负值.考虑这样的声明:int x= 0xFFFFFFFFF.这是在假设十六进制值具有相同的 以带符号值−1.On most architectures with 32-bit signed, this will be true (but not on all of them); but then nothing guarantees that the effective value +4294967295 is converted to the value −1表示的二进制表示形式.
我想要澄清这一粗体声明的含义.该声明是否仅仅说明了
- 并非所有体系 struct 都有32位有符号整数,这一简单的事实意味着没有什么能保证从+4294967295到-1的转换?
或者,它是在试图说明这一点
- 即使在32位有符号的体系 struct 上,也没有什么能保证有效值+4294967295转换为-1?
如果是后者,为什么会是这样?十六进制值与32位带符号体系 struct 上的-1具有相同的位表示这一事实难道不能保证转换在那里成功吗?