Bitwise operators
Bitwise operators are operations that align bits from low to high.
symbols |
function |
Example |
Personal Understanding |
& |
Bitwise-AND |
$m & $n |
Full 1 is 1, otherwise 0 |
| |
Bitwise OR |
$m | $n |
Full 0 is 0, 1 is 1 |
^ |
Bitwise XOR OR |
$m | $n |
The difference is 1, the same is 0 |
~ |
Bitwise REVERSE |
~$m |
|
<< |
Shift left |
$m << $n |
|
>> |
Shift Right |
$m >> $n |
|
Positive number of the original code, anti-code, the complement is the same, negative numbers are not the same
Original code: 8-bit binary of the number, sign bit (first bit) 0 for positive, 1 for negative
Anti-code: Positive anti-code and the same as the original code, negative anti-code is the sign bit 1 unchanged, every bit of integer binary digit negation, get the inverse code
Complement: positive complement and the same as the original code, negative anti-code sign bit 1 unchanged, bitwise negation, the end (the lowest bit) plus 1; Computing in the computer is in the form of a complement of the operation, storage is also complementary
The features of the complement:
1, a negative integer (or the original code) and its complement (or complement) added, and for the module.
2, the complement of an integer and then seek complement, equal to the integer itself.
3, complement positive zero and negative 0 means the same method.
& Operators
<? PHP $m = 1; $n = 2; $mn $m $n ; Echo $mn;
Operation result is 0
Explanation: Convert 1, 2 to binary (8-bit) to
00000001
00000010
In the bitwise-and process, the bitwise comparison, the total 1 is 1, the comparison result is 00000000, so the output 0.
Negative & Operations
With 2&-7=? Calculation as an example:
(1), the calculation of 2 of the complement: 2-> original code:00000010-> anti-code:00000010-> complement: 00000010
(2), calculation-7 of the complement: -7-> original code:10000111->:11111000-> complement: 11111001
(3), the calculation of the complement of 2&-7, and the original code---2&-7 complement:00000000-> back code:00000000-> The original code: 00000000
(4), have 2&-7 the original code to get 2&-7 value, so 2&-7 = 0
| operator
<? PHP $m = 1; $n = 2; $mn $m $n ; Echo $mn;
The result of the operation is 3, similarly, the conversion to the binary as above
00000001
00000010
In the bitwise or process, 1 is 1, all 0 is 0, then the result is 00000011, so the output is 3.
^ operator
<? PHP $m = 1; $n = 2; $mn $m $n ; Echo $mn;
The result of the operation is 3, similarly, the conversion to the binary as above
00000001
00000010
In the bitwise or process, the difference is 1, the same is 0, so the result is 00000011, and then output 3.
~ operator
<? PHP $m = 2; $m 1 = ~$m; Echo $m 1;
The result of the operation is-3, here is a sobering.
Note: In a computer, negative numbers are expressed in the form of a positive complement.
1:2 of the 32-bit original code is 0000 0000 0000 0000 0000 0000 0000 0010
2: Bitwise reversed after 1111 1111 1111 1111 1111 1111 1111 1101
Since the first number is 1 and the sign bit is 1, it is negative, so the complement of its positive value is expressed as: (the sign bit of the inverse code is invariant, the bitwise negation, and the end plus 1)
1000 0000 0000 0000 0000 0000 0000 0011
So the output is-3.
<< operators
<? PHP $m = 3; $m 1=$m << 1; Echo $m 1;
The result of the operation is 6
The essence of the left shift operation is to shift the binary value of the corresponding data to the left bit by bit, and fill 0 in the vacated position, the highest bit overflow and discard.
3 of the 32-bit original code is, 0000 0000 0000 0000 0000 0000 0000 0011
Move left one: 0000 0000 0000 0000 0000 0000 0000 0110
So for 6
According to the manual description you can see that the bitwise operation can be seen to move one bit to the left, it is to implement multiply 2 operation. The operation speed of the displacement operations is much higher than that of multiplication. Therefore, when the multiplication operation of the data is processed, the displacement operation can be used to obtain a faster speed.
It is suggested that all the multiplication operations of 2 are converted to displacement operations, which can improve the efficiency of the program operation.
>> operators
Move right one bit, similar to the << operator, except that this is the right shift.
View article: Conversion between original code, inverse code, and complement and simple operation
PHP bit Operation detailed
PHP bit operators in the detailed
PHP Bitwise operators