• 原码、反码和补码


    1. 原码

    正数的符号位用0表示,负数用1表示,其余位为数值,这种表示方法称为原码。

    X=+105,[X]=0110 1001

    Y=-105,[Y]=1110 1001

    原码简单易懂,与真值的换算也很方便,但若要进行两个异号数相加或者两个同号数相减的运算,就要做减法操作。然而在一般的计算机中是没有减法运算部件的,减法运算也要用加法部件实现,所以要引进反码和补码。

    1. 反码

    正数的反码与原码相同,最高位为符号位,用0表示,其余位为数值。

    [X]=0110 1001

    负数的反码为它的正数按位取反,即连同符号位一同取反。

    [Y]=1001 0110

    所以,8位二进制数表示的反码范围为-127+127。当带符号数用反码表示时,最高位为符号位,当它为正数时,后7位为真正的值,当它为负数时,后7位要取反后才能得到真正的值。

    1. 补码

    正数的补码表示与原码相同,最高位为符号位,用0表示,其余位为真值,负数的补码最高位为1,数值部分则由它的反码再加1形成。

    [X]=0110 1001

    [Y]=1001 0111

    8位二进制数能表示的补码范围为-128+127,可以推算出16位二进制数能表示的二进制补码的范围为-32768+32767。当带符号数用补码表示时,最高位是符号位,当符号位是0时,表示正数,后7位为其真正的数;当符号位是1时,表示负数,要将后7位的最低为减1,求得反码,再按位取反,才能得到真正的数(真数)。


    任何一个数用补码表示后,都可以看成“连同符号位的数”。符号位也一起参加运算,一个数要减去另一个数时,只要加上其补码即可。

    做减法运算,求7-19=?可以用7+[-19]来完成。

    [7]= 0000 0111

    [+19]=0001 0011

    [-19]=1110 1101


    0000 0111 [7]

    + 1110 1101 [-19]

    1111 0100

    所以,和的补码=1111 0100

    和的反码=1111 0011

    和的原码=1000 1100 其真值为-12

  • 相关阅读:
    NSURLConnection的异步请求方式
    <iOS>关于Xcode上的Other linker flags
    使用十六进制色值表示UIColor
    kubernetes & docker
    01 docker的安装与基本使用
    08 数组
    07 grep 正则
    06 信号处理和expect
    05 函数
    04 流程控制
  • 原文地址:https://www.cnblogs.com/MichaelBin/p/4472565.html
Copyright © 2020-2023  润新知