美文网首页
计算机的负数表达

计算机的负数表达

作者: 诺之林 | 来源:发表于2020-04-30 17:28 被阅读0次

    原码

    原码是二进制数字的一种简单的表示法 二进制首位为符号位 1代表负0代表正

    原码 0000 1000 <= 8
    
    原码 1000 1000 <= -8
    

    反码

    反码可由原码得到 如果是正数反码与原码相同 如果是负数反码是其原码(符号位除外)各位取反而得到的

    反码 0000 1000 <= 原码 0000 1000 <= 8
    
    反码 1111 0111 <= 原码 1000 1000 <=-8
    

    补码

    补码可由反码得到 如果是正数补码与反码相同 如果是负数补码是对反码末位加1而得到的(有进位则进位 但不改变符号位)

    补码 0000 1000 <= 反码 0000 1000 <= 原码 0000 1000 <= 8
    
    补码 1111 1000 <= 反码 1111 0111 <= 原码 1000 1000 <=-8
    

    实例

    -128 ~ 127 <= signed char

    补码 0111 1111 <= 127
    
    补码 0000 0000 <= +0
    
    补码 1000 0001 <= 反码 1000 0000 <= 原码 1111 1111 <= -127
    
    • 补码 (1) 0000 0000 <= 反码 1111 1111 <= 原码 1000 0000 <= -0

    • 因为-0和+0的补码都表示0 所以0的原码被拿来表示-128

    • 补码 1000 0000 <= -128 不考虑符号位等同于 原码 1000 0000 <= 128

    小结

    • 补码的意义在于 减法变成加法
    100 - 8 => 100 + (-8)
    
    i - j = i - j + (2^n - 1 + 1) = i + (2^n - 1 - j + 1) = i + ((2^n - 1 - j) + 1)
    
    • 减去一个数 = 加上一个数的补码 (反码 + 1)
    100000000 - 00001000 
    = (11111111 + 00000001) - 00001000 
    = 11111111 - 00001000 + 1 
    = 11110111 + 1 // 补码 = 反码 + 1
    = 11111000 // 补码 = F8
    

    综上所述 计算机都是加法运算 所谓的负数都是表达方式定义

    参考

    相关文章

      网友评论

          本文标题:计算机的负数表达

          本文链接:https://www.haomeiwen.com/subject/ehgzwhtx.html