How computer distinguish an integer is signed or unsigned?

前端 未结 2 1543
梦毁少年i
梦毁少年i 2020-12-30 09:47

Two\'s complements is set to make it easier for computer to compute the substraction of two numbers. But how computer distinguish an integer is signed integer or unsigned in

2条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-30 10:22

    It does not distinguish them. But with the complement, the computation is the same :

    Below, d will be appended to decimal numbers, and b to binary numbers. Computations will be on 8 bits integers.

    -1d + 1d = 1111 1111b + 1b = 1 0000 0000b

    But since we overflowed (yep, that's 8 0s and a 1 on a 8 bits integers), the result is equal to 0.

    -2d + 1d = 1111 1110b + 1b = 1111 1111b = -1d

    -1d + 2d = 1111 1111b + 10b = 1 0000 0001b (this overflows) = 1b = 1d

    -1d + -1d = 1111 1111b + 1111 1111b = 1 1111 1110b (this overflows) = 1111 1110b = -2d

    And if you consider these operations on unsigned (binary values will be unchanged) :

    255d + 1d = 1111 1111b + 1b = 1 0000 0000b (this overflows) = 0d

    254d + 1d = 1111 1110b + 1b = 1111 1111b = 255d

    255d + 2d = 1111 1111b + 10b = 1 0000 0001b (this overflows) = 1b = 1d

    255d + 255d = 1111 1111b + 1111 1111b = 1 1111 1110b (this overflows) = 1111 1110b = 2d

    Unsigned versus signed is thus just a visual representation of unsigned, only used when displaying to a human :-)

提交回复
热议问题