Bitwise operators
Altijd al willen weten hoe ze werken? Bekijk dit dan aandachtig!
Gesponsorde koppelingen
Inhoudsopgave
18 reacties op 'Bitwise operators'
Gesponsorde koppelingen
Je kunt ze gebruiken voor bijvoorbeeld gebruikersrechten.
Enzovoort, het idee is wel duidelijk denk ik toch?
Voordeel is dat je per gebruiker hun recht op kunt slaan met slechts 1 integer in plaats van 8 booleans, o.i.d.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
define('PERM_VIEW', 0);
define('PERM_ADD', 1);
define('PERM_DELETE', 2);
define('PERM_EDIT', 4);
define('PERM_UPLOAD', 8);
define('PERM_USER', 16);
$permissions = PERM_VIEW | PERM_ADD | PERM_UPLOAD | PERM_USER;
// Bekijken:
if(PERM_VIEW & $permissions > 0) {
echo 'Ja, je mag een bericht bekijken';
}
else {
echo 'Nee, je mag een bericht niet bekijken';
}
// Toevoegen:
if(PERM_ADD & $permissions > 0) {
echo 'Ja, je mag een beicht toevoegen';
}
else {
echo 'Nee, je mag geen bericht toevoegen';
}
// Verwijderen:
if(PERM_DELETE & $permissions > 0) {
echo 'Ja, je mag een bericht verwijderen';
}
else {
echo 'Nee, je mag geen berichten verwijderen';
}
// Bewerken
if(PERM_EDIT & $permissions > 0) {
echo '...';
}
?>
define('PERM_VIEW', 0);
define('PERM_ADD', 1);
define('PERM_DELETE', 2);
define('PERM_EDIT', 4);
define('PERM_UPLOAD', 8);
define('PERM_USER', 16);
$permissions = PERM_VIEW | PERM_ADD | PERM_UPLOAD | PERM_USER;
// Bekijken:
if(PERM_VIEW & $permissions > 0) {
echo 'Ja, je mag een bericht bekijken';
}
else {
echo 'Nee, je mag een bericht niet bekijken';
}
// Toevoegen:
if(PERM_ADD & $permissions > 0) {
echo 'Ja, je mag een beicht toevoegen';
}
else {
echo 'Nee, je mag geen bericht toevoegen';
}
// Verwijderen:
if(PERM_DELETE & $permissions > 0) {
echo 'Ja, je mag een bericht verwijderen';
}
else {
echo 'Nee, je mag geen berichten verwijderen';
}
// Bewerken
if(PERM_EDIT & $permissions > 0) {
echo '...';
}
?>
Enzovoort, het idee is wel duidelijk denk ik toch?
Voordeel is dat je per gebruiker hun recht op kunt slaan met slechts 1 integer in plaats van 8 booleans, o.i.d.
> Voordeel is dat je per gebruiker hun recht op kunt slaan met slechts 1 integer in
> plaats van 8 booleans, o.i.d.
Zo behoor je uberhaupt al je rechten niet af te handelen, omdat je dan voor iedere permissie of een nieuwe variabele aan mag maken of een nieuwe constante toe kan voegen.
Daarbij is het echt een ondoenelijke manier van werken voor een beetje grotere websites. Kijk eens naar RBAC of ACL..
Ben zelf nooit zo'n fan geweest van bitfields eigenlijk, maargoed, dat ben ik :).
Daarbij, Mitch, zijn strings in PHP geen char arrays zoals vaak aangenomen word en is de huidige manier om chars uit een string aan te kunnen met $string{0} ipv $string[0]. Als je error_reporting(E_ALL); aan hebt staan krijg je in nieuwere versies ook een error, warning of notice.
> plaats van 8 booleans, o.i.d.
Zo behoor je uberhaupt al je rechten niet af te handelen, omdat je dan voor iedere permissie of een nieuwe variabele aan mag maken of een nieuwe constante toe kan voegen.
Daarbij is het echt een ondoenelijke manier van werken voor een beetje grotere websites. Kijk eens naar RBAC of ACL..
Ben zelf nooit zo'n fan geweest van bitfields eigenlijk, maargoed, dat ben ik :).
Daarbij, Mitch, zijn strings in PHP geen char arrays zoals vaak aangenomen word en is de huidige manier om chars uit een string aan te kunnen met $string{0} ipv $string[0]. Als je error_reporting(E_ALL); aan hebt staan krijg je in nieuwere versies ook een error, warning of notice.
@iedereen_die_denkt_dat_ie_dit_niet_nodig_heeft :)
Dit soort constructies wordt wel degelijk vaak gebruikt in de praktijk. In de embedded software sector kom je dit soort bitwise AND/OR zaken heel veel tegen mbt digitale inputs lezen en digitale outputs schrijven. Leer het maar goed uit je hoofd allemaal, want anders val je erover in de praktijk!
mzzl
Mayhem
Dit soort constructies wordt wel degelijk vaak gebruikt in de praktijk. In de embedded software sector kom je dit soort bitwise AND/OR zaken heel veel tegen mbt digitale inputs lezen en digitale outputs schrijven. Leer het maar goed uit je hoofd allemaal, want anders val je erover in de praktijk!
mzzl
Mayhem
Het hele punt is, dat in sommige gevallen de processor er sneller mee om kan gaan. Je slaat heel veel info op in een beperkte geheugenruimte. Alleen moet je voor jezelf bepalen hoe je het wilt teruglezen. Daar moet je dus wel conventies voor hebben anders is het onleesbaar.
Overigens werkt dit dus enkel voor vaste gegevens. Je kunt er mee bepalen of een object bepaalde vastgestelde eigenschappen heeft. Zoals gebruikersrechten inderdaad of een afbeelding waar een bepaalde kleur, grootte, wel / geen mensen enz. bevat. In een database selecteer je dan heel snel zo'n veld omdat het veld geindexeerd is op een heel klein geheugen vlak (1 i.p.v. veel velden).
Op deze manier kun je af en toe wat snelheid winnen. Daarnaast leer je enigzins wat de computer normaal gesproken voor je doet om zijn berekeningen te kunnen doen. Als je hier dus al rekening mee houdt (niet alleen in PHP) dan kun je daar veel mee bereiken.
- Unomi -
Overigens werkt dit dus enkel voor vaste gegevens. Je kunt er mee bepalen of een object bepaalde vastgestelde eigenschappen heeft. Zoals gebruikersrechten inderdaad of een afbeelding waar een bepaalde kleur, grootte, wel / geen mensen enz. bevat. In een database selecteer je dan heel snel zo'n veld omdat het veld geindexeerd is op een heel klein geheugen vlak (1 i.p.v. veel velden).
Op deze manier kun je af en toe wat snelheid winnen. Daarnaast leer je enigzins wat de computer normaal gesproken voor je doet om zijn berekeningen te kunnen doen. Als je hier dus al rekening mee houdt (niet alleen in PHP) dan kun je daar veel mee bereiken.
- Unomi -
Voordeel is ook, zoals al door is gezegd Allard Naber schreef op 02.03.2005 19:29, dat je rechten mee kunt verdelen met 1 integer. Maar tegelijkertijd ook iemand meerdere rechten zou kunnen geven... bv
iemand heeft recht '2' (bit = 10) nodig om een bericht te bewerken
iemand heeft recht '4' (bit = 100) nodig om een bericht te verwijderen
iemand heeft recht '8' (bit = 1000) nodig om een user te bewerken
etc...
iemand met het recht 14 (2+4+8) (bit = 1110) nodig om al die acties te kunnen uitvoeren...
iemand heeft recht '2' (bit = 10) nodig om een bericht te bewerken
iemand heeft recht '4' (bit = 100) nodig om een bericht te verwijderen
iemand heeft recht '8' (bit = 1000) nodig om een user te bewerken
etc...
iemand met het recht 14 (2+4+8) (bit = 1110) nodig om al die acties te kunnen uitvoeren...
Quote:
Bedoel je nietEen shift naar links zorgt ervoor dat er rechts een bit met waarde 0 wordt toegevoegd, de rechtse vervalt.
Een shift naar rechts zorgt ervoor dat er links een bit met waarde 0 wordt toegevoegd, de links vervalt.
Een shift naar rechts zorgt ervoor dat er links een bit met waarde 0 wordt toegevoegd, de links vervalt.
Quote:
?Een shift naar links zorgt ervoor dat er rechts een bit met waarde 0 wordt toegevoegd, de linkse vervalt.
Een shift naar rechts zorgt ervoor dat er links een bit met waarde 0 wordt toegevoegd, de rechtse vervalt.
Een shift naar rechts zorgt ervoor dat er links een bit met waarde 0 wordt toegevoegd, de rechtse vervalt.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Mitch- 9 jaar geleden
- 1.501 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP tutorials opties
- Berekeningen
- Nieuwste PHP tutorials
- PHP tutorial toevoegen


PHP hulp
0 seconden vanaf nu