6

誰でも以下のコードの内部手順を教えてもらえますか

<? $temp = 0; echo ~$temp; ?> 
   //instead of 1 it displays -1
4

3 に答える 3

4
echo ~$temp;
     ^bitwise not operator

32 ビットを想定すると、符号付き int の場合、is (All 's) のビット単位の逆数です。0000FFFF1-1


それを見る別の方法:何をしたかは、あなたに(1の補数)~を与えることです

数値の負の値を取得するには、2 の補数を取ります。 1's complement + 1

そう、

(1's complement of 0) + 1 = 0 //negative 0 is 0
hence, 1's complement of 0 = -1
于 2012-11-01T11:45:36.933 に答える
1

ビット単位ではない (~):

これにより、オペランドの各ビットが反転されます。オペランドが浮動小数点値の場合、計算前に整数に切り捨てられます。オペランドが 0 ~ 4294967295 (0xffffffff) の場合、符号なし 32 ビット値として扱われます。それ以外の場合は、符号付き 64 ビット値として扱われます

これは、NOT を使用して完全な 32 ビット符号なし整数を実際に扱っているためです。つまり、単に 0001 を反転させるのではなく、000000000000000000000000000001 を反転させるということです。

111111111111111111111111111110になります

基本的に、これは数値 + 1 であり、否定されます。したがって、1 は -(num+1) になり、これは -1 または 111111111111111111111111111110 のバイナリ (符号なし)

例: - $temp=1; echo~$temp; print -2 //-(n++)

于 2012-11-01T12:57:42.553 に答える
0

~0ですので-1

~演算子は のすべてのビットを元に戻します0

関係は次のとおりです。-$temp === ~$temp + 1

于 2012-11-01T11:45:54.390 に答える