Home > Article > Backend Development > Basic bit operations in php
php bit operations
$a & $b and (bitwise AND)
$a | $b or (bitwise OR)
$a ^ $b Xor (bitwise exclusive OR)
~$a Not (Bitwise NOT)
$a << $b Shift left (shift left)
$a >> $b Shift right (shift right)
Detailed explanation
$a & $b Bitwise AND Set the bits that are both 1 in $a and $b to 1;
Example: 10 & 12 = 8
10 1010
12 1100
1000 8
$a | $b bitwise OR $a Or if one of $b is 1, set it to 1;
Example: 10 | 12 = 14
10 1010
12 1100
1110 14
$a ^ $b Bitwise XOR
Example: 10 ^ 12
10 1010
12 1100
0110 6
~a Bitwise notation sets the 0 in $a to 1 and the 1 to 0
Example: ~10 =
10 1010 111111111111111111111111111111111111111111111111111111111110101 -11
$a << $b Move left in $a to the left $b times (each move means multiplying by 2);
Example: 1 << 10 = 1024
1(1) Left shift 10 digits 10000000000(1024)
is equivalent to 1*2 raised to the 10th power. It is really depressing that there is no power operation in PHP.
$a >> $b Right shift moves the value in $a to the right $b times (each move means dividing by 2);
Example: 1024 << 2 = 1256
10000000000 (1024) Shifting 2 bits to the right is 100000000 (256)
php is the operation $a & $b and (bitwise AND) $a | $b or (bitwise OR) $a ^ $b Xor (bitwise exclusive OR )~$a Not(bitwise not)$a << $b Shift left(shift left)$a >> $b Shift right(shift right)
Detailed explanation of $a & $b bitwise AND The bits that are both 1 in $a and $b are set to 1; example: 10 & 12 = 810 101012 1100 1000 8
$a | $b Bitwise OR sets the bit that is 1 in $a or $b is 1; example: 10 | 12 = 1410 101012 1100 1110 14
$a ^ $b bitwise Set to 1, and 1 to 0. Example: ~10 = 10 1010 1111111111111111111111111111111111111111111111111111111110101 -11
$a << $b Move left in $a to the left $b times (each move represents Multiply by 2); Example: 1 << 10 = 10241(1) Shifting left by 10 digits 10000000000(1024) is equivalent to 1*2 raised to the 10th power. It is really depressing that there is no power operation in PHP.
$a >> $b Right shift moves the value in $a to the right $b times (each move means dividing by 2); example: 1024 << 2 = 125610000000000(1024) Right shift 2 digits is 100000000(256)