PHPビット演算

8159 ワード

PHPビット演算
  • バイナリ
  • バイナリは、計算技術で広く採用されている数制で、ドイツの数理哲学の巨匠レブニッツが1679年に発明した.バイナリデータは0と1の2つの数字で表される数です.その基数は2で、進位規則は「逢二進一」で、借位規則は「借一当二」である.現在のコンピュータシステムでは、基本的にバイナリシステムが使用されており、データはコンピュータにおいて主に符号化された形式で格納されている.コンピュータのバイナリは非常に小さなスイッチで、「オン」で1を表し、「オフ」で0を表す.20世紀に第3次科学技術革命の重要な標識の一つと呼ばれるコンピュータの発明と応用は、デジタルコンピュータが「0」からしか識別し処理できないためである.1’記号列からなるコード.その演算モードはまさにバイナリです.19世紀のアイルランドの論理学者ジョージ・ブールの論理命題に対する思考過程は、記号「0」に転化した.「1」のある代数演算で、バイナリは2進位の進位制である.0、1は基本演算子である.0、1の2つの数字記号しか使わないため、非常に簡単で、電子的に実現しやすい.
  • バイナリの特性
  • は0と1だけで構成され、二進一に会うと、二
  • を借りる.
  • バイナリには、原符号、逆符号、補符号の概念
  • がある.
  • 正数の原符号、補符号、逆符号はすべてそれ自身の
  • である.
  • 0の元のコード、逆のコード、補のコードはすべてそれ自身の
  • です
  • 負数の逆符号は、元の符号のビット数が逆である、すなわち0=』1,1=』0
  • である.
  • 負数の補符号は逆符号プラス+1
  • バイナリでは、最上位は正負、0は正数、1は負の
  • を表す.
  • PHPにおけるビット演算は、いずれも符号化の形で行う
  • である.
  • PHPでは、すべての数に符号がある、すなわち符号のない数を考慮しない場合
  • である.
  • PHPビット演算
  • &ビット毎にバイナリに対応するビット毎に1のビットのみが1
  • である.
    var_dump(2 & 3);
    2    ,  ,  
    00000000 00000000 00000000 00000010
    
    3    ,  ,  
    00000000 00000000 00000000 00000011
    
        2&3
    00000000 00000000 00000000 00000010
    
    // 2
    
  • |ビットまたはバイナリのうちの対応するビットが1のビットであれば1
  • となる.
    var_dump(2 | 3);
    2    ,  ,  
    00000000 00000000 00000000 00000010
    
    3    ,  ,  
    00000000 00000000 00000000 00000011
    
        2|3
    00000000 00000000 00000000 00000011
    
    // 3
    
  • ~ビット毎逆バイナリで対応するビットを1の0、0の1
  • とする.
    var_dump(~3);
    var_dump(~2);
    2    ,  ,  
    0 00000010
         ~2
    1 11111101
        11 00000010
        
    1 00000011
    // -3 1 * 1 + 1 * 2
    
    3    ,  ,  
    0 00000011
         ~3
    1 11111100
        11 00000011
        
    1 00000100
    // -4
    
  • ^ビット異またはバイナリのうちの対応するビットが1つで0のビットが1
  • である.
    var_dump(2 ^ 3);
    2    ,  ,  
    00000000 00000000 00000000 00000010
    
    3    ,  ,  
    00000000 00000000 00000000 00000011
    
         2^3
    00000000 00000000 00000000 00000001
    
    // 1
    
  • >>右シフトバイナリにおいて、[2で割ったn次方]最高位は一定のまま、(シンボルビットは不変)低位は右にnビット(nビットをなくす)移動し、失われた補上シンボルビット
  • $a = -2;
    echo $a<<2;
    //    $a = 10000000 00000000 00000000 00000010
    
    //         11111111 11111111 11111111 11111101
    
    //         11111111 11111111 11111111 11111110     =》      +1
    
    //     ,     ,     ,   0  
    //          11111111 11111111 11111111 11111000
    
    //     ,    
    //         111111111 11111111 11111111 11110111
    
    //     ,     ,  
    //        100000000 00000000 00000000 00001000
    
    // -8
    
  • <<左シフトバイナリでは、[2を乗じるn次方]の最高位は一定のまま、(シンボルビットは不変)高位は左にnビットをシフトし、低位はnビット
  • をシンボルビットで充填する.
    echo -2>>3;
    
    //    10000000 00000000 00000000 00000010
    //    11111111 11111111 11111111 11111101
    //    11111111 11111111 11111111 11111110
    //    3 ,     ,     ,             
    //     11111111 11111111 11111111 11111111
    //    11111111 11111111 11111111 11111110
    //    10000000 00000000 00000000 00000001
    
    // -1
    

    GITHUBアドレス