我的印象是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; ~INT_MAX == INT_MIN
(编辑:对于两个补码,这是每个现代处理器使用的),而不是0.在C中,除了0之外的所有值,包括负数,在条件中使用时将评估为true。
如果你切换到无符号类型,一切都应该按照预期工作,因为~UINT_MAX == 0
。
我的印象是INT_MAX将打开int的所有32位。
没有;它只会打开int
1的低31位 - 最高(符号)位将保留0表示正值。 ~INT_MAX
对应~0x7FFFFFFF
或0x80000000
。
你在考虑UINT_MAX
。
int
;一些实现可以使用更宽的整数。