C语言中右移与除法的比较

最近在做项目的时候,遇到了一个有趣的现象。那就是,对于除2的整数次幂的操作而言,为了加快计算速度,一般情况下,会用右移(>>)来替代除法(/)。但实际上,在VS中,右移等价于matlab中的floor(地板)操作,即,向负无穷大方向取整

Part I: 除法与右移

首先看看被除数为负数的情况:

1,-3/2 = -1.5

对于除法而言,-3/2等于-1,相当于直接截断小数位,没有四舍五入。

对于右移而言,-3>>1等于-2,可能是四舍五入(-0.5),可能是向负无穷-Inf方向取整,但没有截断。

2,-7/4 = -1.75

对于除法而言,-7/4等于-1,同样,直接截断小数位,没有四舍五入。

对于右移而言,-7>>2等于-2,可能是四舍五入(-0.75),可能是向负无穷-Inf方向取整,但没有截断。

3,-5/4 = -1.25

对于除法而言,-5/4等于-1,直接截断。

对于右移而言,-5>>2等于-2,证明之前的计算并没有四舍五入(-0.25),一定是向负无穷-Inf方向取整,等同于matlab中的floor。

小结:对于被除数为负数的情况而言,右移不等价于除法,除法是直接截断了小数部分,而右移动是floor。

被除数为正数的情况:

1,3/2 = 1.5

对于除法而言,3/2等于1,和被除数为负数的结果一样,唯一的差异就是正负号,依然是截断。

对于右移而言,3>>1等于1,这和被除数为负数的结果不一样。从1.5到1,再一次证明了右移的做法是在向负无穷-Inf方向取整。

2,7/4 = 1.75

对于除法而言,7/4等于1,直接截断。除了符号不同,和被除数为负数的结果一样。

对于右移而言,7>>2等于2,从1.75到1,向负无穷-Inf方向取整。

3,5/4 = 1.25

对于除法而言,5/4等于1,直接截断,和被除数为负数的结果一样。

对于右移而言,-5>>2等于-2,从1.25到1,等同于floor,向负无穷-Inf方向取整。

小结:对于被除数为正的情况,右移的结果等于除法。对于正数而言,除法直接截断的效果等同于向-inf方向取整。

总结:

对于除法而言,无论被除数是正还是负,结果是相同的。对于右移而言,被除数是正数和负数时,结果是不同的。

Part II: 乘法与左移

因为,乘法的计算中不存在小数,所以,左移和乘法对正数和负数得到的结果都是一样的。


(全文完)

作者 --- 松下J27

(配图与本文无关)

版权声明:文中的部分图片,文字或者其他素材,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27

C语言编程技巧 --- C语言中左移右移与乘除法的比较相关推荐

  1. c语言编程技巧分析,C语言难点及编程技巧分析

    摘要:近些年信息技术发展迅速,社会需要大量专业的计算机人才,C语言是学习计算机知识的专业理论课程,能够为以后的学习打下专业基础.但目前C语言学习受到各方面因素的影响,学习效果不是很理想,很多时候即使努 ...

  2. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...

  3. c语言中求匀加速直线速度,速求C语言编程题 c语言编程速度求

    导航:网站首页 > 速求C语言编程题 c语言编程速度求 速求C语言编程题 c语言编程速度求 相关问题: 匿名网友: #include //计算行元素和 void CountRow(int a[] ...

  4. c语言编程心得,C语言编程心得

    记录这些是为了日后自己想查阅以前经验的方便,同时若能给其他网友带来一些帮助,就更好了~ C语言,自己经常遇到的问题: 1.段错误 段错误一般是由于访问了不存在的地址造成的,具体的原因有文件路径不存在, ...

  5. rmd中无法打开链结r_十个超级好用的R语言编程技巧,一般人绝不知道!

    全文共3997字,预计学习时长8分钟 图片来源:pexels.com/@pixabay 由于R语言生态系统内容繁复并在不断发展,人们往往容易忽视一些切实有用的知识.这些技巧往往非常简单,但对于完成工作 ...

  6. r语言remarkdown展示图_十个超级好用的R语言编程技巧,一般人绝不知道!

    全文共3997字,预计学习时长8分钟 图片来源:pexels.com/@pixabay 由于R语言生态系统内容繁复并在不断发展,人们往往容易忽视一些切实有用的知识.这些技巧往往非常简单,但对于完成工作 ...

  7. MSP430C语言编程技巧,TIMSP430微控制器软件编程经验和应用技巧 - 全文

    本文主要介绍TIMSP430微控制器软件编程设计中的实践经验和应用技巧. 第一部分讲述基于中断的标准程序流程模式,适用于大多数的产品应用编程:另外一部分讲述MSP430微控制器编程人员在开发产品时需要 ...

  8. c语言中左移右移有什么作用,C语言中左移和右移运算符详细介绍

    搜索热词 C语言中左移和右移运算符详细介绍 左移运算符(< 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出 ...

  9. c语言左移15位,关于c语言中左移右移运算符的问题

    参照<c与指针>,在c语言中左移时,不论算术左移还是逻辑左移效果都是相同的.而且对于有符号和无符号类型执行相同的操作,即按照二进制位向左左移N位.例如: 1 clude 2 intmain ...

最新文章

  1. 10月第2周.ORG总量TOP10:中国增1701个 涨幅最大
  2. 2022/4/3刷题
  3. python 获取当前时间 时间差
  4. python是个啥-Python是个什么鬼?师兄用它一年发表5篇SCI!
  5. python退出程序-【转】python 退出程序的方式
  6. 机器学习入门系列(2)--机器学习概览(下)
  7. boost serialization 运行错误_boost c++之事件处理
  8. Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生产实践
  9. .net创建XML文件的两种方法
  10. MySQL卸载干净检查_MySQL数据库卸载干净处理
  11. 基于Java swing+mysql+eclipse的【水电费管理系统】
  12. 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100
  13. React-cra项目初始化 必做操作
  14. 【研一周小结】第三周个人学习总结
  15. 打补丁文件时候patch -p1命令的含义
  16. Cisco 2960 3750交换机端口流量限速(QOS)
  17. python写文件字母_Python - 文件读写
  18. jQuery--复制节点clone()详解
  19. 【小白向】简单随意DIY你的U盘图标
  20. NLP中面向文本表示的模型梳理

热门文章

  1. 解决误删Android系统的tmp目录
  2. predict函数 R_超星尔雅-R语言学习总结(上)
  3. TCP连接建立三握手
  4. 健康生活 多用肥皂少用洗涤剂
  5. 二级联动 三级联动 多级联动 无限级联动下拉列表或菜单专题
  6. ES索引创建、新增与修改字段
  7. (总结)什么是HTML语义化
  8. 隐私泄露防不胜防,真的没有办法了吗?
  9. 微信小程序实现登录获取头像昵称
  10. SSL协议和SET协议