私が(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
?