ฉันมักจะสันนิษฐานว่าเมื่อทำเพิ่มประสิทธิภาพธรรมชาติจะใช้การดำเนินการที่มีประสิทธิภาพค่าที่เหมาะสมเช่นถ้าผมเขียน(a % 256)
(a & 0xFF)
เมื่อทำการทดสอบกับคอมไพเลอร์ 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
และเมื่อลองรหัสอื่น:
// Type your code here, or load an example.
int mod(int num) {
return num & 0xFF;
}
mod(int):
movzx eax, dil
ret
ดูเหมือนว่าฉันกำลังพลาดอะไรบางอย่างไปหมด ความคิดใด ๆ
%
ไม่&
เช่นกัน
num
เป็นunsigned
?