【问题标题】:How does ~0x00 return -1?~0x00 如何返回 -1?
【发布时间】:2020-10-27 15:56:35
【问题描述】:

据我所知,~0x00 等于: 第一步,将 0 变为 1,将 1 变为 0,第二步,加 1 第一步:11111111111111111111111111111(计数=32)

第二步:11111111111111111111111111111+1=0

我哪里做错了?

【问题讨论】:

    标签: c binary bit bitmask


    【解决方案1】:

    ~ 运算符不执行 2 的补码否定。您可以使用一元 - 运算符来做到这一点(假设您的机器使用 2 的补码表示)。

    ~ 所做的是反转所有位。就是这样,不用加1。

    【讨论】:

    • 但是我说的是c中的位掩码,真的很抱歉我没有在描述中提到它,这是我的第一个问题。当我在 c 编译器上编译 ~0x00 时,它返回 -1。
    • @user238795 这是正确的,因为~ 只反转位,并且所有位为 1 的有符号整数的值为 -1。
    • 啊,我真的很抱歉,我认为反转所有位是得到 2 的补码。非常感谢你们俩。
    • @user238795 你在问题中描述的,反转所有位 然后加 1 是 的补码。
    • The ~ operator does not perform 2's complement negation 不,它只是简单的二进制请求,它不关心什么`补全。
    【解决方案2】:

    第1步是正确的;没有第 2 步。一元 ~ 不会否定值 (1 => -1),它只会反转位 (0101 => 1010)。

    一元 - 否定值,并且在二进制补码系统上将执行与您的两个步骤非常相似的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多