C 语言整型谜题

酷壳
酷壳
创建于2022-1-16 阅读
1
阅读原文

如题,此篇文章是描述C语言中的整数谜题。

假定机器字长是32位的,用2的补码表示整数。对以下C表达式,请问它们在所有情况下都正确吗?如果不是,请给出反例。

初始化:

int x = foo();
int y = bar();
unsigned ux = x;
unsigned uy = y;

1. 若x < 0, 则x * 2 < 0

2. ux >= 0

3. 若x & 7 == 7, 则(x << 30) < 0

4. ux > -1

5. 若x > y, 则-x < -y

6. x * x >= 0

7. 若x > 0 && y > 0, 则x + y > 0

8. 若x >= 0, 则-x <= 0

9. 若x <= 0, 则-x >= 0

答案如下:

1. 错。当x = INT_MIN

2. 正确。

3. 正确。

4. 错。-1被转换成UINT_MAX

5. 错。当x = -1, y = INT_MIN

6. 错。当x = 65535

7. 错。INT_MAX 和 INT_MAX

8. 正确。

9. 错。INT_MIN


关注CoolShell微信公众账号和微信小程序

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——

相关文章

  • Rust语言的编程范式
  • 程序员练级攻略(2018) 与我的专栏
  • API设计原则 – Qt官网的设计实践总结
  • Leetcode 编程训练
  • State Threads 回调终结者
  • C语言的整型溢出问题
(10 人打了分,平均分: 4.00 )
Loading...