<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 二進制的特性 * 只有 0 和 1 組成, 逢二進一,借一當二 *二進制中有原碼,反碼,補碼的概念 *正數的原碼,補碼,反碼都是它本身 *0 的原碼,反碼,補碼都是它本身 *負數的的反碼是原碼的位數取反,即 0=》1, 1=》0 *負數的補碼是反碼加+1 *在二進制當中,最高位代表數的正負,0 代表正數, 1 代表負數 *在PHP當中的位運算,都是以補碼的形式進行的 *在PHP當中,所有的數都是有符號的,即不考慮無符號數的情況 # 二進制位運算 1. `&`(位與):二進制中相對應的位都是 1 的位才為 1 ``` var_dump(2 & 3); 2 的原碼,反碼,補碼 00000000 00000000 00000000 00000010 3 的原碼,反碼,補碼 00000000 00000000 00000000 00000011 按位與 2&3 00000000 00000000 00000000 00000010 // 2 ``` 2. `|`(位或):二進制當中相對應的位只要有一個是 1 的位就為 1 ``` var_dump(2 | 3); 2 的原碼,反碼,補碼 00000000 00000000 00000000 00000010 3 的原碼,反碼,補碼 00000000 00000000 00000000 00000011 按位與 2|3 00000000 00000000 00000000 00000011 // 3 ``` 3. `~`(位取反):二進制中把相對應的位為 1 的取 0 ,為 0 的取 1 ``` var_dump(~3); var_dump(~2); 2 的原碼,反碼,補碼 0 00000010 按位取反 ~2 1 11111101 最高位是1,是負數 得到反碼 1 00000010 得到補碼 1 00000011 // -3 1 * 1 + 1 * 2 3 的原碼,反碼,補碼 0 00000011 按位取反 ~3 1 11111100 最高位是1,代表負 得到反碼 1 00000011 得到補碼 1 00000100 // -4 ``` 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 ``` 5. `<<`(位左移):將一個運算對象的各二進制位全部左移若干位(**左邊的二進制位丟棄,右邊補0**)。 設 a=1010 1110,`a = a<< 2`?將a的二進制位左移2位、右補0,即得a=1011 1000。 若左移時舍棄的高位不包含1,則每左移一位,相當于該數乘以2。 ``` $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 ``` 6. `>>`(位右移):將一個數的各二進制位全部右移若干位(**正數左補0,負數左補1,即左邊用符號位補充,右邊丟棄**)。 例如:a=a>>2 將a的二進制位右移2位,左補0 或者 左補1得看被移數是正還是負。 操作數每右移一位,相當于該數除以2。 `>>>`(位無符號右移):無符號右移,也叫邏輯右移(**若該數為正,則高位補0,而若該數為負數,則右移后高位同樣補0**)。 ``` 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 echo -2>>>3; //原碼 10000000 00000000 00000000 00000010 //反碼 11111111 11111111 11111111 11111101 //補碼 11111111 11111111 11111111 11111110 //補碼右移3位,符號位不變,最低位移出,移出位使用0填充 // 00011111 11111111 11111111 11111111 //反碼 00011111 11111111 11111111 1111111 //原碼 00011111 11111111 11111111 1111111 // 536870911 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看