Siempre supuse que al hacer (a % 256)
el optimizador, naturalmente, usaría una operación eficiente a nivel de bits, como si escribiera (a & 0xFF)
.
Al probar en el explorador del compilador 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
Y al probar el otro código:
// Type your code here, or load an example.
int mod(int num) {
return num & 0xFF;
}
mod(int):
movzx eax, dil
ret
Parece que me estoy perdiendo algo por completo. ¿Algunas ideas?
%
tampoco lo es &
.
num
es así unsigned
?