C ライクな言語では、演算子を使用せずにブール値を実行できることを理解していnot
ます: (C)
int myBool = TRUE;
myBool = !myBool;
しかし、私の質問は次のとおりです。これは舞台裏でどのように実装されていますか? 私の推測では、ジャンプを使用していますが、過度に使用すると非効率になる可能性があります: (Intel x86 構文)
; assume eax holds boolean
test eax, eax
jnz short boolTrue
inc eax ; eax was 0, now 1
jmp short after
boolTrue: ; eax non-zero
xor eax, eax ; eax now 0
after:
示されているように、少なくとも 1 つのジャンプと 1 つのビット単位の 5 つの命令が必要ですand
( test
)。if (!!fileHandle)
奇妙な理由で"double-nots" ( ) を実行するコード ベースを見たことがあるので、これを行うためのより簡単な方法が必要です。
だから(上記のように):コンパイラはx86でブール値をどのように処理しますか?!