3579 = (3 * 10^3) + (5 * 10^2) + (7 * 10^1) + (9 * 10^0) = 3000 + 500 + 70 + 9
1000 | 100 | 10 | 1 |
3 | 5 | 7 | 9 |
24 = (0 * 2^7) + (0 * 2^6) + (0 * 2^5) + (1 * 2^4) + (1 * 2^3) + (0 * 2^2) + (0 * 2^1) + (0 * 2^0) = 16 + 8
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
Er gaan 8 bits in 1 byte.
De hoogste waarde van een byte is 255.
$a & $b | AND | Bits die voorkomen in $a en $b |
$a = 12; $b = 24; echo $a & $b;
Het resultaat is 8 :
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
12 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
24 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
$a = 13; $b = 25; echo $a & $b;
Het resultaat is 9 :
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
13 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
25 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
$a ^ $b | XOR (exclusive or) | Bits die voorkomen in $a of $b, maar niet in bijde voorkomen |
$a = 12; $b = 24; echo $a ^ $b;
Het resultaat is 20 :
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
12 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
24 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
~ $a | NOT | Bits die niet voorkomen in $a |
$a = 12; $b = 24; echo ~$a & $b;
Het resultaat is 16 :
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
12 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
24 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
Bits die niet voorkomen in $b
$a = 12; $b = 24; echo $a & ~$b;
Het resultaat is 4 :
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
12 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
24 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
$a << $b | Shift left | Verschuift de bits van $a $b naar links |
$a = 24; echo $a << 2; // met twee vermenigvuldigen
Het resultaat is 96 :
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
24 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
96 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
16 x 2 = 32 x 2 = 64 8 x 2 = 16 x 2 = 32 64 + 32 = 96
$a >> $b | Shift right | Verschuift de bits van $a $b naar rechts |
$a = 24; echo $a >> 2; // delen door twee
Het resultaat is 6 :
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
24 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
6 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
16 : 2 = 8 : 2 = 4 8 : 2 = 4 : 2 = 2 4 + 2 = 6
define('READ', 1); define('ADD', 2); define('EDIT', 4); define('DELETE', 8);$gebruiker = 7;
echo ($gebruiker & READ) ? "
Gebruiker mag lezen
" : "Gebruiker mag niet lezen
"; echo ($gebruiker & ADD) ? "Gebruiker mag toevoegen
" : "Gebruiker mag niet toevoegen
"; echo ($gebruiker & EDIT) ? "Gebruiker mag wijzigen
" : "Gebruiker mag niet wijzigen
"; echo ($gebruiker & DELETE) ? "Gebruiker mag verwijderen
" : "Gebruiker mag niet verwijderen
";
Het resultaat is :
Gebruiker mag lezen
Gebruiker mag toevoegen
Gebruiker mag wijzigen
Gebruiker mag niet verwijderen
Voordelen
Het voordeel is dat je op deze manier in plaats van verschillende velden :
permission_read | permission_add | permission_edit | permission_delete |
true | true | true | false |
Maar één veld in de database nodig is voor het opslaan van rechten :
permissions |
7 |
Nadelen
Rekenen met bits is geen dagelijks bezigheid, als je later nog eens wijzigingen wilt maken kan je de hele materie weer gaan herhalen.
Meer informatie : PHP: Bitwise Operators - Manual