Bitwise operators

Door Mitch X, 23 jaar geleden, 8.507x bekeken

Altijd al willen weten hoe ze werken? Bekijk dit dan aandachtig!

Gesponsorde koppelingen

Inhoudsopgave

  1. Theorie
  2. Toepassen

 

Er zijn 18 reacties op 'Berekeningen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


23 jaar geleden
 
0 +1 -0 -1
eindelijk:S
Mitch X
Mitch X
23 jaar geleden
 
0 +1 -0 -1
Eindelijk?
Mitch X
Mitch X
23 jaar geleden
 
0 +1 -0 -1
Ik zie dat het nog niet lekker werkt.
PHP gaat niet zo goed met typen om :(
Marien xD
Marien xD
23 jaar geleden
 
0 +1 -0 -1
wel leuk moet ik onthouden voor school :P
Johan
Johan
23 jaar geleden
 
0 +1 -0 -1
leuk... scoor je punten mee Marien..!! ;)


23 jaar geleden
 
0 +1 -0 -1
Tja en waar het veder echt nodig voor is...
Maar wel een leuk weetje
Marien xD
Marien xD
23 jaar geleden
 
0 +1 -0 -1
@ Johan
Lol ;) dat is zeker (alsof ik het nu al niet doe :) we zijn nu php aan het leren :( saaaaaaaaaaaaaaaaaaaaaaaai)

maar verder heb je het niet echt nodig nee ;)


23 jaar geleden
 
0 +1 -0 -1
d


23 jaar geleden
 
0 +1 -0 -1
Je kunt ze gebruiken voor bijvoorbeeld gebruikersrechten.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 '...';
  }


?>


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.
PrisonerOfPain
PrisonerOfPain
23 jaar geleden
 
0 +1 -0 -1
> 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.


23 jaar geleden
 
0 +1 -0 -1
@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
Arend a
Arend a
23 jaar geleden
 
0 +1 -0 -1
Chmod werkt ook gewoon bitwise. Het is volgens mij gewoon de manier om een flag-achtig permissie systeem snel op te slaan.


22 jaar geleden
 
0 +1 -0 -1
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 -


20 jaar geleden
 
0 +1 -0 -1
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...
Henk
Henk
20 jaar geleden
 
0 +1 -0 -1
Quote:
Een 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.
Bedoel je niet
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.
?
Steen
steen
18 jaar geleden
 
0 +1 -0 -1
Kan iemand mij gaan uitleggen waarom de 'strhoofdletters' functie steeds een mooie 0 weergeeft?
PHP Newbie
PHP Newbie
18 jaar geleden
 
0 +1 -0 -1
Post je vraag inclusief een klein stukje relevante code even in het forum.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Toby hinloopen
toby hinloopen
18 jaar geleden
 
0 +1 -0 -1
display bits is een beetje nutteloos, PHP heeft daar een functie voor :P
decbin()
en
bindec()

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Theorie
  2. Toepassen

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.