誰でも以下のコードの内部手順を教えてもらえますか
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
ビット単位ではない (~):
これにより、オペランドの各ビットが反転されます。オペランドが浮動小数点値の場合、計算前に整数に切り捨てられます。オペランドが 0 ~ 4294967295 (0xffffffff) の場合、符号なし 32 ビット値として扱われます。それ以外の場合は、符号付き 64 ビット値として扱われます
これは、NOT を使用して完全な 32 ビット符号なし整数を実際に扱っているためです。つまり、単に 0001 を反転させるのではなく、000000000000000000000000000001 を反転させるということです。
111111111111111111111111111110になります
基本的に、これは数値 + 1 であり、否定されます。したがって、1 は -(num+1) になり、これは -1 または 111111111111111111111111111110 のバイナリ (符号なし)
例: - $temp=1; echo~$temp; print -2 //-(n++)
~0
ですので-1
。
~
演算子は のすべてのビットを元に戻します0
。
関係は次のとおりです。-$temp === ~$temp + 1