名前が示すように、PHP のビット演算子は、演算対象のオペランドに対してビット レベルで演算を実行します。これは、これらのオペランドをビットレベルに変換することによって行われ、その後、それらに対して必要な計算が行われます。高速に処理するために、いくつかの数学演算をブール値レベルではなくこのビット レベルで実行できます。
広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
PHP のビット演算子の一部を以下に示します。
二項演算子は 2 つのオペランドを処理します。 PHP では、ビットごとの AND 演算子は 2 つの数値を入力オペランドとして受け取り、これら 2 つの数値の各ビットに対して AND を実行します。結果はブール値で、両方のビットが 1 の場合は 1、それ以外の場合は 0 になります。
構文:
$first_op & $sec_op
& は、この操作を実行するために使用される記号です。
例:
<?php $a=61; $b=32; echo $a & $b; ?>
出力:
以下は、表内の 61 と 32 のバイナリ表現です。 AND 記号に従って、両方のビットに 1 が含まれる場合にのみ 1 が出力され、それ以外の場合は 0 が返されます。したがって、以下に示すように、3 番目のビットのみが条件に一致するため、最終的な出力は 32 になります。
Place value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$a | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | = | 61 |
$b | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | = | 32 |
Output | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | = | 32 |
Similar to Binary AND, the bitwise OR operator takes two numbers as input operands and performs OR on each bit of these two numbers, and the result is a Boolean. It returns 1 if either of the bits or both the bits are 1. Hence the result will be 0 only if both digits are 0.
Syntax:
$first_op | $sec_op
| is the symbolical representation of bitwise OR.
Example:
<?php $a=50; $b=36; echo $a | $b; ?>
Output:
Below is the binary representation of 50 and 36, respectively, as shown in the table. As per the OR operation, we can see that in the 2nd, 3rd, 5th, and 6th bit, there are digits that are 1; hence the respective position below will also be 1, and the remaining digits are filled by 0 since they do not satisfy the condition. Hence the final output we get is 54.
Place value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$a | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | = | 50 |
$b | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | = | 36 |
Output | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | = | 54 |
This binary operator takes the input of two numbers as operands and performs an XOR operation on every bit. The result of these two numbers will be true if either of the bits is true, and the output will be false if both bits are true and both bits are false. The below table can be used for reference to the same.
a | b | OUTPUT |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Syntax:
$first_op ^ $sec_op
^ is the symbolical representation of bitwise XOR.
Example:
<?php $a=22; $b=31; echo $a ^ $b; ?>
Output:
Below is the binary representation of 22 and 31, respectively, shown in the table. In the below table, we can see that in the 5th and 8th bits, one of the bits is 1; hence in the output, those bits are 1, and the remaining are 0. The resulting output is 9 when converted to decimal.
Place value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$a | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | = | 22 |
$b | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | = | 31 |
Output | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | = | 9 |
Unlike above all operators, this is a unary operator; hence it performs a bitwise NOT on a single operand taken as its input. As the name suggests, bitwise NOT output is the opposite of its input.
Syntax:
~ $first_op
~ is used to represent bitwise NOT.
Example:
<?php $a=20; $b=65; echo $a & ~ $b; ?>
Output:
In the above code, we first perform bitwise NOT on the second operator and then combine it with a bitwise AND with the first operator to get the output. The table below shows the result after NOT is performed on $y and the final output, which is 20 in decimal.
Place value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$a | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | = | 20 |
$b | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | = | 65 |
~$b | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | = | 190 |
Output | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | = | 20 |
This operation differs from the above operations and involves shifting bits. 2 types of shifting can be performed: left shift and right shift.
Here the input bits are shifted to their left by the number of places as specified.
Syntax:
$first_op << $n
Where $n refers to the number of places by which bits must be shifted.
Example:
<?php $a=4; $b=3; echo $a << $b; ?> </h5> <p><strong>Output:</strong></p> <p><img src="https://img.php.cn/upload/article/000/000/000/172490636633998.png" alt="PHP のビット演算子" ></p> <p>Here we are specifying to shift binary 4 by 3 digits to its left. Hence the resulting output we get is 32.</p> <table> <tbody> <tr> <td width="58"><strong>Place value</strong></td> <td width="58"><strong>128</strong></td> <td width="58"><strong>64</strong></td> <td width="58"><strong>32</strong></td> <td width="58"><strong>16</strong></td> <td width="58"><strong>8</strong></td> <td width="58"><strong>4</strong></td> <td width="58"><strong>2</strong></td> <td width="58"><strong>1</strong></td> <td width="58"></td> <td width="58"></td> </tr> <tr> <td width="58"><strong>$a</strong></td> <td width="58">0</td> <td width="58">0</td> <td width="58">0</td> <td width="58">0</td> <td width="58">0</td> <td width="58">1</td> <td width="58">0</td> <td width="58">0</td> <td width="58">=</td> <td width="58">4</td> </tr> <tr> <td width="58"><strong>Output</strong></td> <td width="58">0</td> <td width="58">0</td> <td width="58">1</td> <td width="58">0</td> <td width="58">0</td> <td width="58">0</td> <td width="58">0</td> <td width="58">0</td> <td width="58">=</td> <td width="58">32</td> </tr> </tbody> </table> <h5>Right Shift( >> )</h5> <p>Here we are shifting the input bits to their right by the number of places as specified.</p> <p><strong>Syntax</strong>:</p> <pre class="brush:php;toolbar:false">$first_op >> $n
Where $n is the number of places it is to be shifted.
Example:
<?php $a=7; $b=2; echo $a >> $b; ?>
Output:
Here we are shifting binary 7 by two bits to its right. Hence the resulting output we get is 1.
Place value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$a | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | = | 7 |
output | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | = | 1 |
Above, we have covered all the basic bitwise operations used in PHP. As their name suggests, they can operate only on each bit of its input and not on whole numbers. They are still used in modern coding as they have a few advantages over the present join since data storing and fetching is relatively lesser and boosts performance too.
以上がPHP のビット演算子の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。