Toon posts:

[PHP] bitwise calculation

Pagina: 1
Acties:

Onderwerpen


Verwijderd

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®
Verwijderd 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.”


Verwijderd

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
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
$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 ;)
Verwijderd 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.

Je eigen tweaker.me redirect

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: 09-09 13:58

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.


Verwijderd

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
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd 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.

Je eigen tweaker.me redirect

Over mij


Verwijderd

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