(~INT_MAX && INT_MAX)返回1?

问题描述 投票:-1回答:2

我的印象是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给了我需要的结果。谢谢大家!

c expression numeric-limits
2个回答
4
投票

你在这里使用签名的int; ~INT_MAX == INT_MIN(编辑:对于两个补码,这是每个现代处理器使用的),而不是0.在C中,除了0之外的所有值,包括负数,在条件中使用时将评估为true。

如果你切换到无符号类型,一切都应该按照预期工作,因为~UINT_MAX == 0


1
投票

我的印象是INT_MAX将打开int的所有32位。

没有;它只会打开int1的低31位 - 最高(符号)位将保留0表示正值。 ~INT_MAX对应~0x7FFFFFFF0x80000000

你在考虑UINT_MAX


  1. 假设一个32位int;一些实现可以使用更宽的整数。

© www.soinside.com 2019 - 2024. All rights reserved.