代码之家  ›  专栏  ›  技术社区  ›  presence

(~ INT\u MAX&&INT\u MAX)返回1?

  •  -1
  • presence  · 技术社区  · 7 年前

    我的印象是INT\u MAX将打开INT的所有32位。如果我将其取反并将其与自身进行“and”,我应该将所有0与所有1进行比较,然后返回false。我错过了什么?

    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\u MAX可以获得所需的结果。谢谢大家!

    2 回复  |  直到 7 年前
        1
  •  4
  •   nemequ    7 年前

    你正在和 签署 此处输入; ~INT_MAX == INT_MIN ( 编辑 :对于2的补码,这是每个现代处理器使用的),而不是0。在C中,当在条件中使用时,除0以外的所有值(包括负数)都将计算为true。

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

        2
  •  1
  •   John Bode    7 年前

    我的印象是INT\u MAX将打开INT的所有32位。

    不它将只打开 int 1. -最上面的(符号)位将保留0以表示正值。 ~INT_MAX 对应于 ~0x7FFFFFFF 0x80000000 .

    你在想 UINT_MAX .


    1. 假设为32位 内景 ; 一些实现可能使用更宽的整数。

    推荐文章