【发布时间】:2017-11-09 01:55:00
【问题描述】:
我确实知道有符号无符号等的区别。 但我不明白以下代码:
unsigned int x = 1;
int y = -1;
if(y < x)
printf("of course it is");
else
printf("strange stuff");
1 应该大于 -1,无论使用哪种表示。因为控制台会显示“奇怪的东西”。
【问题讨论】:
-
运算符 (
-
ISO/IEC 9899:2011 (C) §6.5.8 Relational operators -1202 如果两个操作数都具有算术类型,则执行通常的算术转换。两个操作数都将被强制转换为
unsigned int,而在二进制补码中,unsigned int y = -1; // = 4294967296 = 2^32 since integers are 32-bit.因此您正在比较4294967296 < 1这是错误的。 -
这解释了结果。但是为什么将 y 转换为 unsigned int。为了匹配类型,x 可以转换为 Two´s Complement。
标签: c