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

2023-10-27

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
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • Python人脸检测实战之疲劳检测

    本文主要介绍了实现疲劳检测 如果眼睛已经闭上了一段时间 我们会认为他们开始打瞌睡并发出警报来唤醒他们并引起他们的注意 感兴趣的朋友可以了解一下 今天我们实现疲劳检测 如果眼睛已经闭上了一段时间 我们会认为他们开始打瞌睡并发出警报来唤醒他们并
  • c语言编程函数名:b开头

    函数名 bar 功 能 画一个二维条形图 用 法 void far bar int left int top int right int bottom 程序例 include
  • LaTeX快速入门(超详细~)

    文章目录 LaTeX快速入门 前言 1 LaTeX源文件的基本结构 2 LaTeX中的中文处理方法 3 字体字号设置 3 1 字体族设置 3 2 字体系列设置 粗细 宽度 3 3 字体形状设置 3 4 中文字体设置 3 5 字体大小设置 4
  • vscode 添加全局宏定义

    问题 利用vscode编辑代码时 设置了禁用非活动区域着色后 在一些编译脚本中配置的宏又识别不了 遇到 ifdef包住的代码就会变暗色 想查看代码不是很方便 如下图 解决 在vscode中添加全局宏定义 步骤 1 ctrl shift p
  • 课时 6 自测题

    通过 Deployment 不能实现以下功能 单选题 A 应用扩缩容 B 应用发布回滚 C 应用重启 D 应用副本数量维持 一个 Deployment 中 哪些 labels selector 必须一致 单选题 A deployment L
  • 微信小程序首页数据初始化失败的解决方法

    一 问题描述 用户首次后再次进入小程序时 我们通常需要通过获取用户openid或unionid用作唯一标示与后台进行数据交流 初始化用户信息 当我们通过第三方服务器跟微信建立请求时 微信需要用户确认是否公开信息 如图1 从console可以
  • ARM中CPSR的标志位中的C和V

    进位标志和溢出标志 这次大概总结一下进位标志 Carry Flag CF 和溢出标志 Overflow Flag OF 的含义和理解方式 首先明确一点基本认识 处理器本身并不在意也不知道参与算术运算或者逻辑运算的操作数是有符号的还是无符号的
  • 工具类篇-07-往Linux服务器上传文件工具类

    文章目录 1 依赖 2 FTPUtil 1 依赖
  • 光子晶体激光器

    1 分布式反馈DFB 2 布拉格反射DBR 转载于 https www cnblogs com Iknowyou p 7536991 html
  • Linux 网络通信C/S、TCP/IP、Socket 最全详解( 9 ) -【Linux通信架构系列 】

    系列文章目录 点击进入系列文章总目录 C 技能系列 Linux通信架构系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 期待你的关注哦 现在的一切都是为将来的梦想编织翅膀 让梦想在现实中展翅高飞 Now ever
  • html文件如何做成链接,如何将文件做成超链接HTM网页?

    回答 首先先将插入点置于所需插入超链接位置 或选中一个要作为超链接显示的对象 如文本 图片等等 例 将Word文档的文字链接到一张图片 请点击输入图片描述 选中需要链接的文字 鼠标右键点击 超链接 选项 或者点击菜单栏的 插入 超链接 即可
  • 【赠书活动|第三期《Spring Cloud Alibaba核心技术与实战案例》】

    文章目录 特色 内容简介 作者简介 抽奖方式 本期中奖者 特色 不留遗漏 全面覆盖Dubbo核心知识点 直击要害 实战化案例精准定位技术细节 学以致用 精要式演示确保开发 学习不脱节 潜移默化 研磨式知识讲解渗透技术要点 提升效率 垂直式技
  • ore than one file was found with OS independent path 'META-INF/androidx.localbroadcastmanager_localb

    项目 build gradle 的 android节点下新增 packagingOptions exclude META INF androidx localbroadcastmanager localbroadcastmanager ve
  • CVPR无监督/自监督学习(Un/Self-supervised Learning)方向论文学习(附摘要)

    目录 2022CVPR UniVIP A Unified Framework for Self Supervised Visual Pre training 自监督学习 Crafting Better Contrastive Views f
  • larvel 生命周期理解

    参考 https www jianshu com p 08b810b720d9 不能理解服务器容器的强烈推荐这位大佬写的 https www cnblogs com JdsyJ p 12670497 html 今天学习下laravel的生命
  • 星图按转化线索回传对接思路与示例

    一 什么是星图 二 什么是线索转化 三 对接中的一些疑问 四 如何对接开发 五 星图侧如何联调测试 一 什么是星图 抖音星图是抖音电商蓝图下 为品牌方 MCN公司和明星 达人服务并收取分成 在这可以实现订单接收 签约管理 项目汇总 数据查看
  • 数值模拟使用matlab实现案例

    好的 我来为您讲解如何使用MATLAB来进行数值模拟 首先 您需要安装并打开MATLAB软件 然后 您可以在MATLAB的命令窗口中输入您要模拟的数学方程 并使用MATLAB的内置函数和符号进行运算 例如 如果您想对于y x 2进行模拟 您
  • 探索图像处理的利器——OpenCV

    目录 引言 一 OpenCV简介 二 OpenCV的特点 三 OpenCV的应用领域 四 实际案例 结论 引言 在当今信息化的时代 图像处理已经成为了日常生活中不可或缺的一部分 从社交媒体滤镜到自动驾驶系统 图像处理技术的广泛应用正在改变着
  • OpenCV+Mediapipe手势动作捕捉与Unity引擎的结合

    OpenCV Mediapipe手势动作捕捉与Unity引擎的结合 前言 Demo演示 认识Mediapipe 项目环境 手势动作捕捉部分 实时动作捕捉 核心代码 完整代码 Hands py py代码效果 Unity 部分 建模 Unity
  • C语言编程技巧 --- C语言中左移右移与乘除法的比较

    C语言中右移与除法的比较 最近在做项目的时候 遇到了一个有趣的现象 那就是 对于除2的整数次幂的操作而言 为了加快计算速度 一般情况下 会用右移 gt gt 来替代除法 但实际上 在VS中 右移等价于matlab中的floor 地板 操作