c++负数的余数怎么算求余数

为了账号安全,请及时绑定邮箱和手机
C++求余用的“%”有与它效率相同的其它算法吗?
最近好多人私信求微信是什么鬼......
如果右侧为常数,可转换成乘法、右移和減法。现代的编译器都会做这个优化,例如// mod.c
unsigned a = 123;
int main() { return a % 13; }使用 clang -c -S mod.c 输出汇编
$0, -4(%rbp)
_a(%rip), %ecx
%eax, -8(%rbp)
## 4-byte Spill
%ecx, %eax
%edx, %edx
-8(%rbp), %ecx
## 4-byte Reload
%edx, %eax这是直接翻译,用 divl 做除数,这指令同时能获得余数(edx ),但 divl 是很慢的。然而,使用优化的话 clang -c -S -O3 mod.c
_a(%rip), %eax
$, %rax, %rcx ## imm = 0x4EC4EC4F
$13, %ecx, %ecx
%ecx, %eax解释一下,因为
/ 2^34 ≈ 1 / 13 a % 13
= a - (a / 13) * 13
= a - uint32_t((uint64_t(a) * ULL) && 34) * 13
已被提问者采纳
你还没有登录,请先登录或注册慕课网帐号
x mod y: while(x &= y) x -=最终x就是要获得的结果,适用于x比y很大的时候。如果觉得行希望采纳,谢谢!
你还没有登录,请先登录或注册慕课网帐号
11661人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2C/C++中取余数运算%是如何实现的?时间复杂度是怎样的?能否举例?
A Mod B = A-(A div B) * B (div含义为整除);例如:11 %2 = 11 -
(11 /2)*2 = 1;//由于这里只是进行了一条语句的运算,所以时间复杂度为常数阶O(1);
为您推荐:
其他类似问题
扫描下载二维码C++中 %余数的问题3%4的余数是3除数和被除数是什么?怎么区分?40%-7的余数和40%7的余数怎么求,其中一个是余数是负的,怎么判断正负?
运算符左边的是被除数,右边的是除数;余数的正负只与左边的一样,也就是说余数和被除数的正负一样,与除数(右边)的无关!
为您推荐:
前面是被除数,后面是除数
符号根据左边的来.比如40%-7 的结果一定与40的符号相同.只要记住这点就可以了 其他的就好算了.-7%40 的结果就是 -7了计算出来的符号 总是和左边的 数字符号相同
上面的是除数下面的是被除数
扫描下载二维码C++使用位操作求解余数
[问题点数:40分]
C++使用位操作求解余数
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 负数取余数 的文章

 

随机推荐