逻辑左移、逻辑右移、算术左移、算术右移区别
更新于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。
可见两种移位结果不同。
以上属于转载别人观点,个人暂更倾向于第二种观点
逻辑左移、逻辑右移、算术左移、算术右移区别相关推荐
- 【Java】位运算符---算术右移和逻辑右移、算术左移和逻辑左移
文章目录 1. 算术左移和逻辑左移 2. 算术右移和逻辑右移 3. Java中<<.>>和>>>的含义 1. 算术左移和逻辑左移 对于有符号数或无符号数:算术 ...
- 算术左移、算术右移、逻辑右移
首先说明一点,本文所有的操作都是针对存储在计算机中中二进制的操作,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的. 算术左移(<<):有符号的移位操作:该操作时将运算数的二进 ...
- 算术左移,逻辑左移,算术右移,逻辑右移之间的区别
1.算术左移,逻辑左移: 都是在右边补0: 比如 00101011 算术左移一位:01010110 逻辑左移一位:01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如000 ...
- 逻辑左移、算术左移、逻辑右移、算术右移
汇编指令: (注意,所有移位指令,被移出去的那个位上的值,会被赋值给CF标志位) 逻辑左移:SHL(右边补0) 算术左移:SAL(1.寄存器中自动转换成SHL,左移不存在算术左移,所有左移都是SHL: ...
- java的算术右移(>>)、算术左移(<<)及逻辑右移(>>>,无符号移位)
特别注意 特别注意:计算机运算是采用补码计算的.最后输出结果是运算结果后补码的原码. 本文所有的操作都是针对存储在计算机中中二进制的操作,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的. ...
- 算术左移,算术右移;逻辑左移,逻辑右移
1.算术左移.逻辑左移 算术左移和逻辑左移一样都是右边补0 [例] 00101011 算术左移一位:01010110 逻辑左移一位:0101011 二进制数值,左移n位等于原来的数值乘以2的n次方 [ ...
- 逻辑左移,逻辑右移,算术左移,算术右移的区分
逻辑左移(SHL)和算数左移(SAL),规则相同,右边统一添0 逻辑右移(SHR),左边统一添0 算数右移(SAR),左边添加的数和符号有关 (正数补0,负数补1) 比如一个有符号位 ...
- 逻辑左移、逻辑右移、算术左移、算术右移、循环左移、循环右移
逻辑左移时,最高位丢失,最低位补0: 逻辑右移时,最高位补0,最低位丢失: 算术左移时,依次左移一位,尾部补0,最高的符号位保持不变. 算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一 ...
- 算术右移(right arithmetic shift)逻辑右移(right logical shift)算术左移和逻辑左移(left logical shift)
算术右移:数字向右移动,左边补符号位.Windows中支持的函数为:Int64ShraMod32 逻辑右移:数字向右移动,左边补0.Windows中支持的函数为:Int64ShrlMod32 算术左移 ...
最新文章
- 综述|核心开发者全面解读Pytorch内部机制
- Python中常用的一些操作总结(未完待续)update @ 2017-5-18
- 两台路由器之间建立邻接关系的过程即报文信息交换过程
- Windows 内核数据结构学习总结
- wireshark相关协议详解和nc命令建立对话
- qml中loader加载页面会闪屏_Qml动态语言切换
- C#字符串:转数组、数字
- Java防止Xss注入json_每日一题(java篇) 如何防止xss注入
- HA机制的大数据集群的搭建过程
- 3月2日,阿里云开源 PolarDB 企业级架构即将发布
- 操作系统原理 —— 操作系统概述
- 使用Idea简单搭建springcloud项目
- 简单查询(1.普通查询2.条件查询3.模糊查询4.排序查询5.统计查询(聚合函数)6.分组查询7.分页查询)...
- poj 2240 Arbitrage floyd基础,字符串输入有点麻烦
- Windows中使用Netsh Winsock Reset命令解决网络连接问题
- hl3150cdn废粉仓清零_常见施乐联想兄弟等打印机加粉清零(废粉仓清零)方法
- 计算机怎么禁止远程桌面,win7怎样禁用远程桌面共享_win7系统禁用远程桌面共享的步骤-系统城...
- React 移动端`1px`像素边框
- MyBatis核心流程三大阶段之数据读写阶段
- 逆水寒2021最新服务器,【图片】《逆水寒》2021年4月29日更新公告【逆水寒ol吧】_百度贴吧...