我一直认为执行(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
似乎我完全错过了一些东西。有任何想法吗?
%
也不&
是。
num
没有兴趣,您会得到更好的结果unsigned
吗?