C 语言整型谜题
如题,此篇文章是描述C语言中的整数谜题。
假定机器字长是32位的,用2的补码表示整数。对以下C表达式,请问它们在所有情况下都正确吗?如果不是,请给出反例。
初始化:
int x = foo();
int y = bar();
unsigned ux = x;
unsigned uy = y;
-
若x < 0, 则x * 2 < 0
-
ux >= 0
-
若x & 7 == 7, 则(x << 30) < 0
-
ux > -1
-
若x > y, 则-x < -y
-
x * x >= 0
-
若x > 0 && y > 0, 则x + y > 0
-
若x >= 0, 则-x <= 0
-
若x <= 0, 则-x >= 0
答案如下:
-
错。当x = INT_MIN
-
正确。
-
正确。
-
错。-1被转换成UINT_MAX
-
错。当x = -1, y = INT_MIN
-
错。当x = 65535
-
错。INT_MAX 和 INT_MAX
-
正确。
-
错。INT_MIN
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)