因为左移操作不会导致符号位出现缺位,所以不考虑符号位,低位补0即可;右移操作会涉及到符号位出现缺位的问题,所以在有符号数的右移操作时要考虑符号位怎么补的问题。

  左移操作(<<)对于无符号数和有符号数来讲,均为逻辑左移操作,对应汇编中的shl;

  右移操作(>>)对于无符号数来讲为逻辑右移,对应汇编中的shr,对于有符号数来讲为算数右移,对应汇编中的sar。

  对于VC编译器编出来的代码,移位操作的位数保存在cl寄存器。

  当移动的位数大于或等于该数据类型位数时,CPU对移动的位数进行基于数据类型位数的取余运算,余数为实际移动的位数。比如uint32_t类型左移32位,实际移动0位,也就是数字保持不变;左移33位,则实际左移1位。

  逻辑左移时,高位补0;逻辑右移时,低位补0。

  算数右移时,最高的符号位在每移动一位时都会自动补为原来的值。举例来讲的话,比如int32_t类型的0x80000000,右移1位的话变成0xC0000000,右移31位变成0xFFFFFFFF,也就是说任何int32_t类型的负数在右移31位后都会变成0xFFFFFFFF(符号位的复制),任何int32_t类型的正数在右移31位后都会变成0(相当于逻辑右移)。

  因为浮点数的特殊编码方式,浮点数的移位操作基本没啥意义。

  在汇编层面,移位操作要比乘除法的操作效率高,不过对于现代编译器而言,已经具备了对于C中乘除法的指令级优化功能。

  对于正整数,在不产生溢出的情况下,左移n(n>=1)位的效果为:×(2的(类型位数%n)次幂);右移n(n>=1)位的效果:÷(2的(类型位数%n)次幂),只保留结果的整数部分。

最新文章

  1. Python学习——基础篇
  2. SharePoint 2010 文档管理之过期归档工具
  3. iOS之UI--辉光动画
  4. (Struts)ActionForm类及表单数据验证
  5. v4l2
  6. 面向对象的static关键字(类中的static关键字)
  7. ExtJs之Ext.apply
  8. C盘清理大作战
  9. mac 浏览器 强刷快捷键
  10. LeetCode——Pascal&#39;s Triangle
  11. java中将list、map对象写入文件
  12. 解决 Windows instance 时间不同步问题 - 每天5分钟玩转 OpenStack(153)
  13. 安卓开发之mqtt协议
  14. Java爬虫——常用的maven依赖
  15. Mybatis--课程中循序渐进的体会 《黑马程序员_Springmvc+Mybatis由浅入深全套视频教程video》
  16. [洛谷P1638]逛画展
  17. [HDFS_add_3] HDFS 机架感知
  18. vue 基础(二)
  19. scikit-FEM-mesh
  20. poj1611 The Suspects(并查集)

热门文章

  1. J2EE 中 用 El表达式 和 Jsp 方式 取得 URL 中的参数方法
  2. Android之旅 自我图示总结四大组件
  3. 使用python读取word
  4. 解决Ubuntu Ping网关Destination Host Unreachable错误
  5. 在低带宽或不可靠的网络环境中安装 Visual Studio 2017
  6. 【php】Apache无法自己主动跳转却显示文件夹与php无法连接mysql数据库的解决方式
  7. ScriptableObject 对象化的运用
  8. spring4.3+mybatis3.4+freemark+log4j2+fastjson整合
  9. curl命令常用参数
  10. MVC与MVP(转)