Why is abs(0x80000000) == 0x80000000?

前端 未结 9 1407
心在旅途
心在旅途 2021-02-07 02:51

I just started reading Hacker\'s Delight and it defines abs(-231) as -231. Why is that?

I tried printf(\"%x\", abs(0x80000000)) on a f

9条回答
  •  无人共我
    2021-02-07 03:20

    This goes back to how numbers are stored.

    Negative numbers are stored using two's complement. The algorithm goes like ...

    Flip all the bits, then add 1.

    Using eight bit numbers for examples ...

    +0 = -0

    00000000 -> 11111111, 11111111 + 1 = 100000000

    (but due to limitation of bits, this becomes 00000000).

    AND...

    -128 [aka -(2^7)] equals -(-128)

    10000000 -> 01111111, 01111111 + 1 = 10000000

    Hope this helps.

提交回复
热议问题