phpにおけるビット逆~の理解


昨日の夜、phpの本を読んでいたとき、あるオペレータ「~」を見て、ビットによって逆オペレータを取ると説明しましたが、普段あまり使われていないのでよくわかりませんでした.ついでにネットで受け取りましたが、あまりはっきりしていないような気がしました.間違ったことを言ったら批判して指摘してください.では、このビット逆の演算方法についてお話しします.
まず、$a>$b、$a>$bなどのオペレータをオペレータ単位で分割します.1:0.1つ目の式では、オペランドが$aと$bの2つであるため、これを2元演算と呼び、2つが3元である.したがって、ビット別逆は、$a=~$bのような一元演算子である.
次に,計算機演算時に格納されるデータが0,1というバイナリデータであることを理解する.また、ソースコードの補符号形式で格納され、以下に3つの概念を引き出す.
ソースコード:絶対値の大きさでバイナリ数に変換された整数で、最上位のシンボルビットは保持する必要があります.最高位0は正数、1は負数、例えば(-3:1000,000,000,000,000,000,000,000,000,000,000,000,001).
逆符号:ソースコードの反転であり、最高符号ビットを除いて、残りの1は0,0は1になる.
補コード:つまりコンピュータに格納されたデータであり、ソースコードの逆コードプラス1として定義される.(注意:正数の補符号、すなわちソースコード自体)
ここでもう一つ説明したいことがありますが、さっきソースコードを述べたときに-3という数が32ビットを占めているのを見て、私たちはなぜ32ビットで他のものではないのかを考えていました.php 5を知ることができますXバージョンの整数の最大最小区間は-2 e 31から+2 e 31です.
シンボルビットがあるので、数値表現は最大31乗です.phpの高バージョンでは64ビット、すなわち-2 e 63から+2 e 63に達する.現在使用されている一般的なバージョンが5であるからだ.Xのバージョンは32ビットバイナリで言います.
では、概念を理解しました.次に、具体的な操作を見てみましょう.
まずコード演算結果を見てみましょう
       
<?php
    $a = -3;
    $b = ~$a;
    var_dump($b);    // int 2
?>

上は-3位で逆を取って2を得たので、上の理論で分析してみましょう.
-3ソース:1000,000,000,000,000,000,000,001
逆符号:1111 1111 1111 1111 1111 1111 1111 1111 1100
符号化:1111 1111 1111 1111 1111 1111 1111 1101(逆符号化1で符号化)
ビット単位の反転操作を実行すると、次のようになります.
補コード:0000 0000 0000 0000 0000 0000 0010
逆符号:0000 0000 0000 0000 0000 0000 0010
ソース:0000 0000 0000 0000 0000 0000 0010
ビット単位で逆のソースコードと補コードを実行するのはなぜですか?うーん、実は上で説明したように、ソースコードが符号変換されるときは符号ビットは変わらない.ビット別逆操作後の符号化符号の符号ビットは0で正数を表し,正数の符号化はソース符号自体である.だからソース10進数に換算すると2になるので、これでわかると思います!今分かったかな...<応援してくれてありがとうブログから成長>