精华内容
下载资源
问答
  • 第一种观点: 逻辑左移=算数左移,右边统一填0 ,最高位移入cf 逻辑右移,左边统一添0 ,...算术右移的2种实现方式(结果是相同的): 1.符号位不变,数值位右移,最低位移入cf,最高位数值位填符号位的值(1或0); 2

    更新于20200715:
    逻辑移位和算术移位不同,否则汇编指令就保留一个就行了,干嘛还保留2个呢?
    因此:
    逻辑移位主要用于无符号数的移位,左移和右移均是移丢一位+空位补0
    算术移位主要用于有符号数的移位运算,移位操作时,无论是正数还是负数,无论是原码,反码,补码,均不能改变符号位的位置和值
    算术移位分正数的原码,反码,补码的左移和右移,负数的原码,反码,补码的左移和右移
    其中正数的原码,反码,补码完全一样,所以左移和右移时,符号位不变,数值的最高位或最低位移丢,空出的位补0;
    负数的原码,左移:符号位不变,数值最高位移丢,最低位补0;右移:符号位不变,数值最低位移丢,最高位补0,
    负数的反码,左移:符号位不变,数值最高位移丢,最低位补1;右移:符号位不变,数值最低位移丢,最高位补1,
    负数的补码,左移:符号位不变,数值最高位移丢,最低位补0;右移:符号位不变,数值最低位移丢,最高位补1。

    第一种观点:
    逻辑左移=算术左移,右边统一填0 ,最高位移入cf

    逻辑右移,左边统一添0 ,最低位移入cf

    特殊:算数右移,左边添加的数和符号位有关,最低位移入cf

    e.g:1010101010,其中[]是添加的位
    
    逻辑左移一位:010101010[0]
    
    算数左移一位:010101010[0]
    
    逻辑右移一位:[0]101010101
    
    算数右移一位:[1]101010101
    

    算术右移的2种实现方式(结果是相同的):
    1.符号位不变,数值位右移,最低位移入cf,最高位数值位填符号位的值(1或0);
    2.符号位和数值位无差别右移,最低位移入cf,最高位填符号位的值(1或0)。

    第二种观点:

    算术移位时符号位(最高位)不变
    左移时最高数值位移进cf,最低位填0;
    右移时最低数值位移进cf,最高数值位填符号位的值(1或0);

    逻辑移位时没有符号位:
    左移时最高位移进cf,最低位填0;
    右移时最低位移进cf,最高位填0;
    例如

    10101110逻辑右移一位得01010111逻辑左移一位得01011100。
    若将其视为补码则算术左移一位得11011100算术右移一位得11010111。
    可见两种移位结果不同。
    

    以上属于转载别人观点,个人暂更倾向于第二种观点

    展开全文
  • 1、算术左移-逻辑左移 算术左移和逻辑左移一样都是右边补0: 比如 00101011 算术左移一位:01010110 逻辑左移一位:01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如00011010十进制是26,...

    1、算术左移-逻辑左移

    算术左移和逻辑左移一样都是右边补0: 比如 00101011 

    算术左移一位:01010110 

    逻辑左移一位:01010110 

    对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 

    比如00011010十进制是26,左移两位后是01101000转成十进制是104恰好是26的4倍。 

    ps:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。

    2、算术右移,逻辑右移

    逻辑右移很简单,只要将二进制数整体右移,左边补0即可 

    如10101101逻辑右移一位为01010110 

    算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0 

    比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1) 

    对于二进制的数值来说右移n位等于原来的数值除以2的n次方 

    比如10110100十进制是76(需要先将这个补码转换成原码之后再转换成十进制),右移两位后是11101101转成十进制是19恰好是76的4倍。 

    算术左移和算术右移主要用来进行有符号数的倍增、减半; 

    逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半。

    展开全文
  • 1.算术左移,逻辑左移: 都是在右边补0: 比如 00101011 算术左移一位:01010110 逻辑左移一位:01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如00011010十进制是26,左移两位后是01101000转成...

    1.算术左移,逻辑左移:
    都是在右边补0: 比如 00101011
    算术左移一位:01010110
    逻辑左移一位:01010110
    对于二进制的数值来说左移n位等于原来的数值乘以2的n次方
    比如00011010十进制是26,左移两位后是01101000转成十进制是104恰好是26的4倍。
    ps:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。

    2.算术右移,逻辑右移
    逻辑右移很简单,只要将二进制数整体右移,左边补0即可
    如10101101逻辑右移一位为01010110
    算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0
    比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1)
    对于二进制的数值来说右移n位等于原来的数值除以2的n次方
    比如10110100十进制是-76(需要先将这个补码转换成原码之后再转换成十进制),右移两位后是11101101转成十进制是-19恰好是76的1/4。
    算术左移和算术右移主要用来进行有符号数的倍增、减半;
    逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半。

    展开全文
  • 1、算术左移-逻辑左移:都是右边补0。 比如 00101011,算术左移一位:01010110,逻辑左移一位:01010110。 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如00011010十进制是26,左移两位后是...
     1、算术左移-逻辑左移:都是右边补0。
     比如 00101011,算术左移一位:01010110,逻辑左移一位:01010110。 
     对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 
     比如00011010十进制是26,左移两位后是01101000转成十进制是104
     恰好是26的4倍。
      ps:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,
      否则会溢出。
      
     2、算术右移,逻辑右移:将二进制数整体右移,左边补0即可。
     如10101101逻辑右移一位为01010110 
     算术右移符号位要一起移动,并且在左边补上符号位,
     也就是如果符号位是1就补1符号位是0就补0 
     比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1) 
     对于二进制的数值来说右移n位等于原来的数值除以2的n次方
      比如10110100十进制是76
      (需要先将这个补码转换成原码之后再转换成十进制),
      右移两位后是11101101转成十进制是19恰好是76的4倍。
     
      算术左移和算术右移主要用来进行有符号数的倍增、减半; 
      逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半。
    
    展开全文
  • 算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。 算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位; 循环左移时,将最高位重新放置最低位 循环右移时,将最低位重新放置最高...
  • 算术左移(<<):有符号的移位操作;该操作时将运算数的二进制码整体左移指定位数(<<符号左侧为运算数,右侧为移动位数),正数左移之后右侧的空位用0补充。如果是负数,移几位左边少几位,右边用0补齐...
  • 算术左移 = 逻辑左移:都是整体左移,低位补0 算术右移 != 逻辑右移,这两者主要的区别就在于 算术右移 -> 整体右移,高位补符号位 逻辑右移 -> 整体右移,高位补0
  • 逻辑左移,逻辑右移,算术左移,算术右移的区分

    千次阅读 多人点赞 2019-03-29 15:02:55
    逻辑左移(SHL)和算数左移(SAL),规则相同,右边统一添0 逻辑右移(SHR),左边统一添0 算数右移(SAR),左边添加的数和符号有关 (正数补0,负数补1) 比如一个有符号位的8位二进制数11001101,逻辑右移不管符号...
  • 算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。 算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位; 循环左移时,将最高位重新放置最低位 循环右移时,将...
  • 算术左移——逻辑左移~~算术右移——逻辑右移

    万次阅读 热门讨论 2017-10-28 10:03:55
    1、算术左移-逻辑左移 算​术左移和逻辑左移一样都是右边补0: 比如 00101011​ 算术左移一位:01010110 逻辑左移一位​:01010110  对于二进制的数值来说左移n位等于原来的数值乘以2的n次方  比如00011010十...
  • 逻辑左移=算数左移,右边统一添0 逻辑右移,左边统一添0 算数右移,左边添加的数和符号有关e.g:1010101010,其中[]是添加的位逻辑左移一位:010101010[0]算数左移一位:010101010[0]逻辑右移一位:[0]101010101算数...
  • 1. 不管是算术左右移和逻辑左右移,最好是unsigned类型,因为这样算术与逻辑是一样的结果。 2. C编译器,默认是算术移位,如是signed类型,这一点一定要把握好。 3. 编程过程中,一定要注意右移操作,注意...
  • 1.算术左移逻辑左移 算​术左移和逻辑左移一样都是右边补0: 比如 00101011​ 算术左移一位:01010110 逻辑左移一位​:01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如00011010十进制是...
  • 1.算术左移逻辑左移 算​术左移和逻辑左移一样都是右边补0: 比如 00101011​ 算术左移一位:01010110 逻辑左移一位​:01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如...
  • 算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。 算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位; 循环左移时,将最高位重新放置最低位 循环右移时,将最低位重新放置最高...
  • 算术左移、算术右移、逻辑右移

    千次阅读 2018-05-13 00:27:38
    算术左移(&lt;&lt;):有符号的移位操作;该操作时将运算数的二进制码整体左移指定位数(&lt;&lt;符号左侧为运算数,右侧为移动位数),左移之后右侧的空位用0补充。算术右移(&gt;&gt;)...
  • 算术左移后溢出判断

    千次阅读 2018-01-06 21:29:55
    取一字节为例,能表示的... 左移得到 0001 0010 也就是 18再看负数 -9,就是 -(0000 1001) 也就是 1111 0110 + 1 即 1111 0111,最高位(符号位)和数据最高位都是 1. 左移后是 1110 1110,反过来是 (1110 1101 + 1)-
  • 补码算术左移溢出的条件

    千次阅读 2018-06-12 21:39:02
    结论:当x1≠x2x1≠x2{{{x}}_{1}}\ne {{x}_{2}}时,也就是符号位与最高位不相等时,补码进行算术左移,溢出。 #include &amp;lt;bits/stdc++.h&amp;gt; #define BUG(x) cout&amp;lt;&amp;lt;#x&...
  • 逻辑右移、算术左移、算术右移

    千次阅读 2019-03-18 16:18:59
    )、算术左移(&amp;lt;&amp;lt;)、算术右移(&amp;gt;&amp;gt;) 参考:https://www.cnblogs.com/yx729315991/p/6387711.html https://blog.csdn.net/u011070169/article/details/53894154
  • 一、文章来由还是上一篇关于移位的问题,那么什么 int 型数只算术左移一位就可以从负数变成正数???二、又谈补码很早之前写过一篇关于补码的文章,但是长时间不看又差不多忘记了,翻出来看发现写的挺烂的,有点没...
  • 1. ,算术或符号左移位 16>>3相当于16*23,高位移出(舍弃),低位的空位补0。 2. >>,算术或符号右移位 16>>3相当于16/23,低位移出(舍弃),高位的空位补符号位,即正数补0,负数补1 (左乘右除) 上面两个会保留...
  • 算术左移( 算术右移(>>):有符号的移位操作;该操作时将运算数的二进制码整体右移指定位数(>>符号左侧为运算数,右侧为移动位数),右移之后左侧的空位正数用0补充(可省略),负数用1补充。 逻辑右移(>>>,...
  • 可能大家第一时间看不太懂,我稍微解释一下:这里x=5(不重要),n=0,以此计算tempN=32(这一点没有问题),但随后测试中发现,立即数1在进行逻辑(算术左移的时候,应该是会在右边补0,那么这样分析结果最后应该...
  • C语言中的逻辑右移和算术左移

    千次阅读 2015-07-27 14:21:17
    经过查证发现,c语言中的移位操作符,在左移时执行的是逻辑移位,在右移时执行的是算术移位。那怎么用>>实现右移操作呢? 又经过查证得知,无符号数的移位操作都是执行的逻辑移位。那么要想用>>实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,474
精华内容 12,189
关键字:

算术左移