1

今日、私は PHP のビット単位の演算子についてもっと学ぼうとしましたが、~ 演算子に少し問題があります。オンライン チュートリアルに従って、数値のセット ビットを逆にすることがわかりました。たとえば、1 バイトが 7 の場合:

    |------------------------------------|
    | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
    |------------------------------------|
    |  0  | 0  | 0  | 0  | 0 | 1 | 1 | 1 |
    |------------------------------------|

そして、〜7を使用してそれを逆にしました:

    |------------------------------------|
    | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
    |------------------------------------|
    |  1  | 1  | 1  | 1  | 1 | 0 | 0 | 0 |
    |------------------------------------|

それは -8 ではなく 248 ではないでしょうか?

4

2 に答える 2

1

いいえ。これは2 の補数です。

各数値の最初のビットはの値です ( PHP では 32 ビット (= 4 バイト) の数値を使用するため、PHP では-2 32 )。ビットが 1 に設定されると、整数は負になります。したがって、非演算子 ( ~) を使用すると、このビットが変化し、数値が負になります。

于 2012-10-28T21:18:23.283 に答える
0

左端のビットがシンボルを示すのは2の補数であり、0は正、1は負を示します。2の補数は、ビットを反転して1を加算することによって計算されます。この場合、1111000(シンボルビットを除く)であり、次に1(1110111)を減算して反転(0001000、負)であるため、-8になります。Cでは、符号付き整数のスコープは-2^15-1から2^15です。

于 2013-03-08T16:30:50.697 に答える