【发布时间】:2018-01-26 21:11:12
【问题描述】:
我的印象是 INT_MAX 将打开一个 int 的所有 32 位。如果我否定它并用它自己“和”它,我应该将所有 0 与所有 1 进行比较并返回错误。我错过了什么?
int x = INT_MAX;
x = ~x && INT_MAX;
printf("x = %d\n", x); /*Returns 1*/
x = 0;
x = ~x && INT_MAX;
printf("x = %d\n", x); /*Returns 1*/
编辑:哇哦,我也在翻转符号位。使用 UNIT_MAX 给了我我需要的结果。谢谢大家!
【问题讨论】:
-
我的印象是 INT_MAX 会打开 int 的所有 32 位。 - 你忘了符号位。
-
&&是逻辑 AND,而不是bit-wise。 -
“我的印象是 INT_MAX 将打开一个 int 的所有 32 位。”你有错误的印象。有符号值使用 MSb 表示负值。
标签: c expression numeric-limits