【发布时间】:2017-03-21 20:44:24
【问题描述】:
我一直认为在执行(a % 256) 时,优化器自然会使用高效的按位运算,就好像我写了(a & 0xFF)。
在编译器资源管理器 gcc-6.2 (-O3) 上测试时:
// Type your code here, or load an example.
int mod(int num) {
return num % 256;
}
mod(int):
mov edx, edi
sar edx, 31
shr edx, 24
lea eax, [rdi+rdx]
movzx eax, al
sub eax, edx
ret
当尝试其他代码时:
// Type your code here, or load an example.
int mod(int num) {
return num & 0xFF;
}
mod(int):
movzx eax, dil
ret
似乎我完全错过了一些东西。 有什么想法吗?
【问题讨论】:
-
0xFF 是 255 而不是 256。
-
@RishikeshRaje:所以?
%也不是&。 -
@RishikeshRaje:我相信 OP 非常清楚这一点。它们用于不同的操作。
-
出于兴趣,如果
num是unsigned,你会得到更好的结果吗? -
@RishikeshRaje 按位和 0xFF 等效于无符号整数的模 2^8。
标签: c++ optimization