我的印象是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给了我需要的结果。谢谢大家!
答案 0 :(得分:4)
您在此处使用已签名注册; ~INT_MAX == INT_MIN
(编辑:对于两个补码,这是每个现代处理器使用的),而不是0.在C中,除0之外的所有值(包括底片)都将计算为true在条件中使用时。
如果您切换到无符号类型,那么自~UINT_MAX == 0
以来所有内容都应按预期工作。
答案 1 :(得分:1)
我的印象是INT_MAX将打开一个int的所有32位。
没有;它只会打开int
1 的低31位 - 最高(符号)位将保留0表示正值。 ~INT_MAX
对应~0x7FFFFFFF
或0x80000000
。
您正在考虑UINT_MAX
。
<小时/>
int
;一些实现可以使用更宽的整数。