Explain why x == ~(~x + 1) + 1 (two's complement and back!)

前端 未结 2 1708
醉话见心
醉话见心 2021-01-06 07:54

As we all know usually negative numbers in memory represents as two\'s complement numbers like that

from x to ~x + 1

and to get back we don

2条回答
  •  说谎
    说谎 (楼主)
    2021-01-06 08:01

    This is because if you increment ~x (assuming no overflow). Then converting it to back to x, you've incremented relative to ~x, but decremented relative to x. Same thing applies vice versa. Assuming your variable x has a specific value, every time you increment it, relative to ~x you'll notice it decrements.

    From a programmer's point of view, this is what you'd essentially witness.

    Let short int x = 1         (0x0001)
    then ~x = 65534             (0xFFFE)
    ~x + 1 =  65534 + 1         (0xFFFF)
    ~(~x+1) = 0                 (0x0000)
    ~(~x+1) + 1 = 0 + 1         (0x0001)
    

提交回复
热议问题