Toon posts:

[PHP] bitwise calculation

Pagina: 1
Acties:

Onderwerpen


Anoniem: 308713

Topicstarter
Dag allen,

Een korte vraag, waarop hopelijk antwoord en/of een verwijzing naar relevante online documentatie.
Kunnen jullie enig houvast geven over hoe ik de volgende berekening uit kan voeren in PHP?

Stel ik heb drie integers/binaire getallen:
int a: 11000 (binair getal 24 )
int b: 01000 (binair getal 8 )
int c: 01001 (binair getal 9 )

Hoe kan ik nu, met de AND operator (`&` in php), controleren of alle bits op de tweede positie 1 zijn (hetgeen het geval is in dit voorbeeld)?
Na enig studiewerk moet het iets worden als:
code:
1
$resultaat = $a & $b & $c;


...maar die formule is niet compleet, omdat ik aan dien te geven dat het om alleen de bit in tweede positie gaat. Kan iemand mij op weg helpen? Veel dank op voorhand.

  • HuHu
  • Registratie: Maart 2005
  • Niet online
01000 binair is 8 decimaal: $a & 8 geeft true.

($a & 8) && ($b & 8) && ($c & 8)

[Voor 8% gewijzigd door HuHu op 20-06-2011 12:04]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Anoniem: 308713 schreef op maandag 20 juni 2011 @ 12:01:
...maar die formule is niet compleet, omdat ik aan dien te geven dat het om alleen de bit in tweede positie gaat. Kan iemand mij op weg helpen? Veel dank op voorhand.
Je moet eens zoeken op "Bitmask". Door alle variabelen te ANDen ben je al een eind op weg, maar je wil de rest van de bits nog weggooien ( Bitmask voor het 2e bit ), en als het resultaat daarvan ongelijk is aan 0, dan is bij alle input's de 2e bit gezet

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Anoniem: 308713

Topicstarter
HuHu schreef op maandag 20 juni 2011 @ 12:03:
01000 binair is 8 decimaal: $a & 8 geeft true.

($a & 8) && ($b & 8) && ($c & 8)
Bedankt, allebei! Dat was precies de gedachtengang die ik even mistte... :)

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:57

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

$a & 8 geeft 8 ;) Maar dat roest verder niet; je wil gewoon het getal waarmee je ge-AND hebt als uitkomst hebben. En je kunt gewoon volstaan met $a & $b & $c & 8 ;)
Anoniem: 308713 schreef op maandag 20 juni 2011 @ 12:01:
Hoe kan ik nu, met de AND operator (`&` in php), controleren of alle bits op de tweede positie 1 zijn (hetgeen het geval is in dit voorbeeld)?
Bitposities tellen we vanaf de LSB naar de MSB; Programming FAQ - Getallen en talstelsels: Signed / Unsigned, MSB en LSB. Je hebt het hier dus over bit 3 ;)

[Voor 82% gewijzigd door RobIII op 20-06-2011 13:30]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • HuHu
  • Registratie: Maart 2005
  • Niet online
RobIII schreef op maandag 20 juni 2011 @ 13:24:
[...]

$a & 8 geeft 8 ;) Maar dat roest verder niet; je wil gewoon het getal waarmee je ge-AND hebt als uitkomst hebben.
Ja, dat bedacht ik me later ook. Het ging me meer even om de omzetting van 01000 naar 8.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-05 17:03

NMe

Quia Ego Sic Dico.

HuHu schreef op maandag 20 juni 2011 @ 12:03:
01000 binair is 8 decimaal: $a & 8 geeft true.

($a & 8) && ($b & 8) && ($c & 8)
code:
1
$a & $b & $c & 8

Iets minder tikwerk. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Anoniem: 308713

Topicstarter
NMe schreef op maandag 20 juni 2011 @ 13:29:
[...]

code:
1
$a & $b & $c & 8

Iets minder tikwerk. :P
Kun je dit ook voor meedere bit-posities doen?
Dus $a & $b & 12? ( == twee posities, nml. de 8 en de 4 positie...)?

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:57

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 308713 schreef op maandag 20 juni 2011 @ 13:39:
[...]


Kun je dit ook voor meedere bit-posities doen?
Dus $a & $b & 12? ( == twee posities, nml. de 8 en de 4 positie...)?
Doe eens gek en probeer 't eens?
En lees je dan eens in in de materie; want dit is toch écht wel héél erg basis-programmeerkennis TBH.

Wikipedia: Bitwise operation
Wikipedia: Boolean algebra
Wikipedia: Boolean algebra (logic)

En handig om onder de knie te hebben: Wikipedia: Truth table

[Voor 50% gewijzigd door RobIII op 20-06-2011 13:43]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Anoniem: 308713

Topicstarter
RobIII schreef op maandag 20 juni 2011 @ 13:41:
[...]

Doe eens gek en probeer 't eens?
Scherp :p Zit niet achter de pc en was te nieuwsgierig voor deze wereld... zal 't direct doen als de tijd rijp is :p

/sorry-modus
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee