【问题标题】:Twos complement on hex十六进制的二进制补码
【发布时间】:2016-05-24 22:50:33
【问题描述】:

给定:

int number = 0xFFFFFF87;
number = ~number + 1;
printf ("%x", number);

为什么“数字”变成“79”而不是“87”?我怎样才能让它'87'?

【问题讨论】:

    标签: hex bitwise-operators signed twos-complement


    【解决方案1】:

    ~ 否定每一位,不仅是十六进制组为 0xF 的那些。

    要让它0x87只需反转操作,即:

    int number = ~(0x87-1); // which is 0xFFFFFF79
    

    【讨论】:

      【解决方案2】:

      它是 0x79,因为 ~0xFFFFFF87 = 0x00000078 加上 1 后得到 0x00000079

      要获取0x87,您应该使用:

      int number = 0xFFFFFF87 & 0xFF;  
      

      这将只选择最低有效字节并用零屏蔽其他字节。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-25
        • 2014-04-16
        • 2014-11-03
        • 2014-03-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多