我一直认为,在编写 (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
看来我完全遗漏了什么。 有什么想法吗?