J'ai toujours supposé qu'en faisant (a % 256)
l'optimiseur utiliserait naturellement une opération efficace au niveau du bit, comme si j'écrivais (a & 0xFF)
.
Lors du test sur l'explorateur de compilateur 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
Et en essayant l'autre code:
// Type your code here, or load an example.
int mod(int num) {
return num & 0xFF;
}
mod(int):
movzx eax, dil
ret
Il semble que je manque complètement quelque chose. Des idées?
%
n'est pas non &
plus.
num
oui unsigned
?