Tôi luôn cho rằng khi thực hiện (a % 256)
trình tối ưu hóa sẽ tự nhiên sử dụng thao tác bitwise hiệu quả, như thể tôi đã viết (a & 0xFF)
.
Khi thử nghiệm trên trình biên dịch explorer 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
Và khi thử mã khác:
// Type your code here, or load an example.
int mod(int num) {
return num & 0xFF;
}
mod(int):
movzx eax, dil
ret
Có vẻ như tôi hoàn toàn thiếu một cái gì đó. Có ý kiến gì không?
%
không phải là &
một trong hai.
num
là unsigned
?