違いはごくわずかかもしれませんが、unsigned long をゼロにするにはどちらがより効率的でしょうか?
unsigned long x;
...
x=0;
--OR--
x^=x;
テイラー
違いはごくわずかかもしれませんが、unsigned long をゼロにするにはどちらがより効率的でしょうか?
unsigned long x;
...
x=0;
--OR--
x^=x;
テイラー
コンパイラが何をするかについて推測する必要はありません。代わりに試してみましょう!
ここにいくつかのテストコードがあります:
void fzero()
{
unsigned long x;
x = 0;
}
void fxor()
{
unsigned long x;
x ^= x;
}
int main()
{
fzero();
fxor();
}
そして、結果のマシンコードを見てみましょう:
; 10 : unsigned long x;
; 11 :
; 12 : x ^= x;
; 13 : }
00000 c2 00 00 ret 0
; 3 : unsigned long x;
; 4 :
; 5 : x = 0;
; 6 : }
00000 c2 00 00 ret 0
PUBLIC main
; Function compile flags: /Ogtpy
; COMDAT main
_TEXT SEGMENT
main PROC ; COMDAT
; 18 : fzero();
; 19 : fxor();
; 20 : }
00000 33 c0 xor eax, eax
00002 c3 ret 0
main ENDP
ああ、見て!どちらも同じように高速で、どちらも正確に 0 ns かかりました。