代码之家  ›  专栏  ›  技术社区  ›  user3325783

二的互补二进制加法

  •  0
  • user3325783  · 技术社区  · 11 年前

    我有一个程序,它将2个2的补码二进制数相加并输出。它们是从文件中读取的,第一个二进制数是2的补码。第二个二进制数是有偏差的符号。为了改变形式偏向于2的补码,我们翻转最左边的一位。然后,我们将两个二进制数相加,并将输出输出到文件。我遇到的问题是理解输出。这是输出,其中第一个二进制数是2的补码,第二个是有偏差的符号。

       01000000 <- 2's complement         64
    +  11000000 <- biased notation        64
    -----------------------------------------------
       10000000 <- 2's complement   Overflow
    
       01111111 <- 2's complement        127
    +  00000000 <- biased notation      -128
    -----------------------------------------------
       11111111 <- 2's complement         -1
    
       00000011 <- 2's complement          3
    +  10000111 <- biased notation         7
    -----------------------------------------------
       00000110 <- 2's complement          6
    
       00001111 <- 2's complement         15
    +  10000111 <- biased notation         7
    -----------------------------------------------
       00010010 <- 2's complement         18
    
       10000000 <- 2's complement       -128
    +  11111111 <- biased notation       127
    -----------------------------------------------
       11111111 <- 2's complement         -1
    
       11110000 <- 2's complement        -16
    +  10001000 <- biased notation         8
    -----------------------------------------------
       11111000 <- 2's complement         -8
    
       10000001 <- 2's complement       -127
    +  00000001 <- biased notation      -127
    -----------------------------------------------
       00000010 <- 2's complement   Underflow
    
       01111111 <- 2's complement        127
    +  00000000 <- biased notation      -128
    -----------------------------------------------
       11111111 <- 2's complement         -1
    
       01110101 <- 2's complement        117
    +  11010001 <- biased notation        81
    -----------------------------------------------
       01000110 <- 2's complement         70
    
       00000000 <- 2's complement          0
    +  10000000 <- biased notation         0
    -----------------------------------------------
       00000000 <- 2's complement          0
    
       00001111 <- 2's complement         15
    +  11110000 <- biased notation       112
    -----------------------------------------------
       01111111 <- 2's complement        127
    
       00001111 <- 2's complement         15
    +  10000001 <- biased notation         1
    -----------------------------------------------
       00010000 <- 2's complement         16
    
       00000111 <- 2's complement          7
    +  11110000 <- biased notation       112
    -----------------------------------------------
       01110111 <- 2's complement        119
    
       11111111 <- 2's complement         -1
    +  01111111 <- biased notation        -1
    -----------------------------------------------
       10101010 <- 2's complement        -86
    
       00000000 <- 2's complement          0
    +  10000000 <- biased notation         0
    -----------------------------------------------
       00000000 <- 2's complement          0
    
       11111111 <- 2's complement         -1
    +  11111111 <- biased notation       127
    -----------------------------------------------
       00101010 <- 2's complement         42
    

    给定第三个例子,3+7=6。 这是正确的吗?这似乎不正确,但其他例子是正确的。比如-16+8=-8。

    所以我的问题是…这个文件的输出正确吗?

    1 回复  |  直到 11 年前
        1
  •  0
  •   Kaleb Droskiewicz    11 年前

    似乎每当你连续三次携带时,它就会掉一个1。与下一个相同,15+7。它没有正确执行进位。

      11  <- carry
     0011 = 3
    +0111 = 7
     1010 = 10
    
    推荐文章