【问题标题】:Understanding two's complement了解二进制补码
【发布时间】:2025-12-13 20:00:02
【问题描述】:

我不明白为什么一个n位的2C系统号可以通过使bit bn = bn−1扩展为一个(n+1)位的2C系统号,即扩展为(n+1)位通过复制符号位。

【问题讨论】:

    标签: bit-manipulation twos-complement


    【解决方案1】:

    这是因为我们计算二进制整数值的方式。

    Working right to left, the sum of each bit_i * 2 ^ i,
    where 
        i is the range 0 to n
        n is the number of bits
    

    因为每个后续的 0 位都不会增加和的幅度,所以将较小的值填充到较宽的位域中是适当的值。

    例如,使用数字 5:

    4 bit:     0101
    5 bit:    00101
    6 bit:   000101
    7 bit   0000101
    8 bit: 00000101
    

    二进制补码系统中的负数则相反。 请记住,您通过先计算一个人的恭维然后加 1 来计算两个人的恭维。

    将上例中的值取反得到 -5:

    4 bit:     0101 (invert)->     1010 + 1 ->     1011
    5 bit:    00101 (invert)->    11010 + 1 ->    11011
    6 bit:   000101 (invert)->   111010 + 1 ->   111011
    7 bit:  0000101 (invert)->  1111010 + 1 ->  1111011
    8 bit: 00000101 (invert)-> 11111010 + 1 -> 11111011
    

    【讨论】: