c++ 位运算 求模 & 除法 (人傻、分多、速来 ^_^)

zhuyf87 2013-03-21 08:15:12
int n;

想求出n除以400的商和余数,也就是除法运算和求余运算。
希望不用%和/运算符,可以用位运算求出来吗?

刚看到我的一个项目代码中都是用的/和%,想看看用位运算能不能求出来,以提高性能。
我的项目是在嵌入式系统里面运行,所以如果可以提高点性能的话就更好了。

马上要去上班了,没时间google了。到了公司先看大家怎么说。
谢谢大家。
...全文
594 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxpandsq 2013-03-21
  • 打赏
  • 举报
回复
好像位运算需要枚举处理器位数·········
FancyMouse 2013-03-21
  • 打赏
  • 举报
回复
引用 5 楼 zhuyf87 的回复:
引用 3 楼 FancyMouse 的回复:gcc里打一个做n/400 n%400的函数,开-O3编译,看看人家怎么做的。 没用过GCC,只用过vc。是看汇编代码吗?
是。vc那就开/O2然后/FA输出汇编。这种东西该怎么优化,写编译器的人早就考虑过了。
傻傻不解释 2013-03-21
  • 打赏
  • 举报
回复
围观
always_learn 2013-03-21
  • 打赏
  • 举报
回复
引用 8 楼 sccdyy226 的回复:
商=(n >> 8) + (n >> 7) + (n >> 4) 余数=n - 商*400
不好意思 错了 貌似除法不满足分配律... 我回去重修小学
zhuyf87 2013-03-21
  • 打赏
  • 举报
回复
引用 1 楼 ganpengjin1 的回复:
采用位移吧。
请问具体可以怎么操作呢?
always_learn 2013-03-21
  • 打赏
  • 举报
回复
商=(n >> 8) + (n >> 7) + (n >> 4) 余数=n - 商*400
  • 打赏
  • 举报
回复
想了半天,实在想不出什么好的办法。 有答案了,楼主通知一下呗,想学学好的方法。
zhuyf87 2013-03-21
  • 打赏
  • 举报
回复
如果是2的整数次幂的数,求余可以这样位匀速吧? 比如:余数 = n - ((n >> 3) << 3);
zhuyf87 2013-03-21
  • 打赏
  • 举报
回复
引用 3 楼 FancyMouse 的回复:
gcc里打一个做n/400 n%400的函数,开-O3编译,看看人家怎么做的。
没用过GCC,只用过vc。是看汇编代码吗?
  • 打赏
  • 举报
回复
计算机已经采用最优的了,直接用除法求余吧,很难再提速了吧 看看楼下怎么说吧
FancyMouse 2013-03-21
  • 打赏
  • 举报
回复
gcc里打一个做n/400 n%400的函数,开-O3编译,看看人家怎么做的。
starytx 2013-03-21
  • 打赏
  • 举报
回复
不停的减400,知道小于400也可以。呵呵
漫步者、 2013-03-21
  • 打赏
  • 举报
回复
采用位移吧。
常如意 2013-03-21
  • 打赏
  • 举报
回复
引用 5 楼 zhuyf87 的回复:
引用 3 楼 FancyMouse 的回复:gcc里打一个做n/400 n%400的函数,开-O3编译,看看人家怎么做的。 没用过GCC,只用过vc。是看汇编代码吗?
gcc是linux系统里面的一种编译工具 关于对400求余的问题,你试试12楼的方法
ken_scott 2013-03-21
  • 打赏
  • 举报
回复
以前无聊整过一个+-*/%的实现: 不用+-*/%实现整数的+-*/%运算 但果真这么用, 就本末倒置了 2^n这种数字可以考虑用位运算来代替*/%, 400不属于这种类型啊

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧