zoukankan      html  css  js  c++  java
  • 逻辑右移和算术右移

    逻辑右移:不管最左边一位是0还是1,都补0.
    算术右移:右移是按最左边(高位)来补的(即如果是1就补1,如果是0就补0,不改变该位的值)

    知识补充

     计算机都是补码运算的

    (1)原码。原码的编码规则是:符号位0表示正,1表示负,数值部分用该数绝对值的二进制数表示。当整数时,小数点隐含在最低位之后;当纯小数时,小数点隐含在符号位和数值位之间,均不占位。通常用[X]表示数X的原码。

    例如,设机器字长为8位,

    [+1] = 00000001         [+127] = 01111111       [+0] = 00000000

    [– 1] = 10000001        [– 127] = 11111111       [– 0] = 10000000

    显然,按原码的编码规则,零有两种表示形式。

    原码表示法简明易懂,与其真值的转换方便,比较容易进行乘除运算。但是在进行加减运算时,原码运算很不方便。由于符号位不能和数值一样参与运算,所以要根据两数的符号情况,同号相加,异号相减,还要根据两数的绝对值大小,令大数减去小数,最后还要判断结果的符号。这样不仅要求运算器既能作加法,又能作减法,还必须附加许多条件判断的处理,最终既增加了运算器的实现复杂性,又延长了运算的时间。

    (2)反码。反码的编码规则是:符号位0表示正,1表示负,正数的反码等于原码,负数的反码等于原码除符号位外按位取反,即0变1、1变0。通常用[X]表示数X的反码。

    例如,设机器字长为8位,

    [+1] = 00000001         [+127] = 01111111       [+0] = 00000000 

    [– 1] = 11111110          [– 127] = 10000000     [– 0] = 11111111

    显然,按反码的编码规则,零也有两种表示形式。

    反码很容易由原码获得,但同样不方便运算,一般在求补码的过程中用到反码。

    (3)补码。补码的编码规则是:符号位0表示正,1表示负,正数的补码等于原码,负数的补码等于反码末位加1。通常用[X]表示数X的补码。

    例如,设机器字长为8位,

    [+1] = 00000001         [+127] = 01111111       [+0] = 00000000

    [– 1] = 11111111          [– 127] = 10000001     [– 0] = 00000000

    显然,按补码的编码规则,零有惟一的表示形式。

    补码的概念来源于数学上的“模”和补数。例如,将钟表的时针顺时针拨快5小时和逆时针拨慢7小时,最后指示的位置相同,则称5和–7互为模12情况下的补数。计算机中机器数受机器字长限制,所以是有限字长的数字系统。对于整数来说,机器字长为n位(含符号位),模是2n;对于有符号纯小数来说,模是2。

  • 相关阅读:
    Mac 卸载MySql的方法
    关于mysql的wait_timeout参数 设置不生效的问题
    linux下利用nohup后台运行jar文件包程序
    MySql创建视图
    spring mvc获取header
    Spring Data Jpa 查询返回自定义对象
    Caused by: org.xml.sax.SAXParseException: The reference to entity "characterEncoding" must end with the ';' delimiter.
    eclipse Reference 功能之——项目之间的引用
    Mac 在启动eclipse时 Failed to load JavaHL Library解决方法
    MySQL Workbench update语句错误Error Code: 1175.
  • 原文地址:https://www.cnblogs.com/xqaizx/p/3014468.html
Copyright © 2011-2022 走看看