मैंने हमेशा यह माना कि जब (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
?