zoukankan      html  css  js  c++  java
  • 定点数表示方法——原码,补码,反码,移码

    1. 真值和机器数

        真值:数的实际值,用正负号和绝对值的某进制形式来表示,如+1010,-12,-FFFF等.

        机器数:真值在计算机中的二进制表示,特点是符号数字化且数的大小受机器字长限制,其表示形式有原码,补码,反码,移码等.

    2. 原码.

        1). 定点小数:

    [{x_{[{ m{原}}]}} = left{ {egin{array}{*{20}{l}}
    {x,0 le x < 1}\
    {{2^0} - x = {2^0} + left| x ight|, - 1 < x le 0}
    end{array}} ight.]

        (其中x[原]是机器数,x是真值,最高位为符号位,下同.)

        表示范围:

    [max = 1 - {2^{ - n}},min = - (1 - {2^{ - n}})]

        (n是指x除符号位的位数,下同)

        如: x=+0.1011, x[原]=0.1011

        x=-0.1011, x[原]=1.1011

        2). 定点整数:

    [{x_{[原]}} = left{ egin{array}{l}
    x,0 le x < {2^{ m{n}}}\
    {2^n} - x = {2^n} + |x|, - {2^n} < x le 0
    end{array} ight.]

        表示范围:

    [max  = {2^n} - 1,min  =  - ({2^n} - 1)]

        如:x=+1011,x[原]=01011

            x=-1011,x[原]=11011

        3). 特点:

        原码实质上为符号位加上数的绝对值,0正1负;

        原码零有两个编码,+0和 -0编码不同,表示不唯一;

        原码加减运算复杂,乘除运算规则简单;

        原码表示简单,易于同真值之间进行转换.

    3. 补码

        1). 定点小数:

    [{x_{[补]}} = left{ egin{array}{l}
    x,0 le x < 1\
    2 + x = 2 - |x|, - 1 le x le 0
    end{array} ight.(mod 2)]

        表示范围:

    [max  = 1 - {2^{ - n}},min  =  - 1]

        如:x=+0.1011,  x[补]=0.1011

            x=-0.1011, x[补]=10+x=10.0000-0.1011=1.0101

        2). 定点整数:

    [{x_{[补]}} = left{ {egin{array}{*{20}{l}}
    {x,0 le x < {2^{ m{n}}},0 le x < {2^n}}\
    {{2^{n + 1}} + x = {2^{n + 1}} - |x|, - {2^n} le x le 0}
    end{array}(mod {2^{n + 1}})} ight.]

         表示范围:

    [max  = {2^n} - 1,min  =  - {2^n}]

        如:x=+1011,x[补]=01011

            x=-1011, x[补]=2^5 – |-1011|=100000 – 1011=10101

        3). 特点

        负数补码实质上为原码除符号位按位取反再加1

        补码最高一位为符号位,0正1负;

        补码零有唯一编码;

        补码能很好用于加减运算;

        补码满足x[补]+(-x)[补]=0;

        补码最大的优点在于能够将减法运算转换成加法运算,其中符号位参与运算,它满足:

    [egin{array}{*{20}{l}}
    {{{(x{ m{ }} + { m{ }}y)}_{left[ 补 ight]}} = { m{ }}{x_{left[ 补  ight]}} + { m{ }}{y_{left[ 补  ight]}}}\
    {{{(x{ m{ }} - { m{ }}y)}_{left[ 补  ight]}} = { m{ }}{x_{left[ 补  ight]}} + { m{ (}} - y{)_{left[ 补  ight]}}}
    end{array}]

        例如:

    [egin{array}{l}
    x = {11_{[10]}} = {1011_{[2]}},y = {5_{[10]}} = {0101_{[2],}}\
    {(x - y)_{[补]}} = {x_{[补]}} + {( - y)_{[补]}} = 01011 + 11011 = 100110(溢出) = 00110 = {6_{[10]}} = x - y;;
    end{array}]

        4). 补码和原码转换.

        正数:x[补]=x[原]

        负数:按位取反,末位加1(符号位除外)

        如:x= -1001001, x[原]=11001001,x[补]=10110110+1=10110111

        5). 补码和真值的转换

    [{ m{补码}}left{ egin{array}{l}
    { m{符号 = }}0{ m{ - 正}},{ m{余下为数值部分}}\
    { m{符号 = }}1{ m{ - 负}},{ m{余下求补为数值部分}}
    end{array} ight.]

    4. 反码

        1). 定点小数

    [{x_{[{ m{反}}]}} = left{ {egin{array}{*{20}{l}}
    {x,0 le x < 1}\
    {(2 - {2^{ - n}}) + x = 2 + x - {2^{ - n}}, - 1 < x le 0}
    end{array}} ight.]

        范围:

    [max = 1 - {2^{ - n}},min = - (1 - {2^{ - n}})]

        如:x=0.1011,x[反]=0.1011

            x=-0.1011,x[反]=1.0100

        2). 定点整数

    [{x_{[{ m{反}}]}} = left{ {egin{array}{*{20}{l}}
    {x,0 le x < {2^{ m{n}}}}\
    {({2^{n + 1}} - 1) + x = {2^{n + 1}} + x - 1, - {2^n} < x le 0}
    end{array}} ight.]

        范围:

    [max  = {2^n} - 1,min  =  - ({2^n} - 1)]

        如:x=1011,x[反]=01011

            x=-1011,x[反]=10100

        3). 特点

       负数反码实质上为原码除符号按位求反,也就是补码-1;

       反码零有两个编码,+0 和 -0 的编码不同;

       反码难以用于加减运算;

       反码的表示范围与原码相同.

    5. 移码:用于表示浮点数的阶码

        1). 定义

    [x[移] = {2^n} + x, - {2^n} le x < {2^n}]

       范围:

    [max  = {2^{n + 1}} - 1,min  = 0]

        如:x=+1011,x[移]=11011

            x=-1011,x[移]=00101

        2). 特点

        移码中符号位表示的规律与原码,补码,反码相反——"1"正"0"负;

        移码为全0时所对应的真值最小,为全1时所对应的真值最大,移码的大小直观地反映了真值的大小,这有助于两个浮点数进行大小比较;

        真值0在移码中的表示形式是唯一的;

        移码把真值映射到一个正数域,所以可将移码视为无符号数,直接按无符号数规则比较大小;

        同一数值的移码和补码除最高位相反外,其他各位相同.

        3). 移码和补码转换

    [egin{array}{l}
    {x_{[补]}} = left{ egin{array}{l}
    x,0 le x < {2^n}\
    {2^{n + 1}} + x, - {2^n} le x le 0
    end{array} ight.\
    {x_{[移]}} = {2^n} + x, - {2^n} le x < {2^n}\
    {x_{[移]}} = left{ egin{array}{l}
    {x_{[补]}} + {2^n},0 le x < {2^n}\
    {x_{[补]}} + {2^n} - {2^{n + 1}} = {x_{[补]}} - {2^n}, - {2^n} le x le 0
    end{array} ight.
    end{array}]

  • 相关阅读:
    七、Vue Cli+ApiCloud
    六、取消eslint 校验代码
    六、匿名方法
    五、vue中export和export default的使用
    四、Vue CLI-异步请求(axios)
    接口自动化测试(7)
    selenium 封装
    flask 动手写的接口平台
    flask入门篇
    python 自动化接口测试(6)
  • 原文地址:https://www.cnblogs.com/reasno/p/4864874.html
Copyright © 2011-2022 走看看