Sökte, men angav kanske fel sökord, för jag fick inget napp.
Mitt problem: Jag har variabeln $i som jag VET håller i en integer s.a.
0 <= $i <= 15. Det skulle vara trevligt om det fanns ett sätt att kolla vilka bitar i talet som är satta.
Alltså ex: $i = 7 ==> binärt 0111. Finns det någon funktion f som:
f($i, 0) ==> 1, f($i, 1) ==> 1, f($i, 2) ==> 1, f($i, 3) ==> 0
Eller hur löser man det? Om det överhuvudtaget går att göra tjusigare än att kolla om den är udda och dividera med 2 successivt...
Lite enkelt gjort. Självklart kan man göra funktionen mer komplex och användbar, men det orkade jag inte just nu - det är ju fotboll på TV. Säg till om du vill ha mer vägledning.
Alltså ex: $i = 7 ==> binärt 0111. Finns det någon funktion f som:
f($i, 0) ==> 1, f($i, 1) ==> 1, f($i, 2) ==> 1, f($i, 3) ==> 0
Eller hur löser man det? Om det överhuvudtaget går att göra tjusigare än att kolla om den är udda och dividera med 2 successivt...
Mums, bitmanipulering! Det ballaste som finns! :D
För att kolla vilka bitar som är satta använder du vänsterskift och bitvis AND, och så utnyttjar du det faktum att 1 är binärt 00000001 (om man har en unsigned byte... bla bla bla...). Exempelvis, vill du kolla om den tredje biten från vänster är satt, gör du så här:
Därför att man då kan klämma in en massa information i en och samma variabel. Tänk dig att du vill ha en klass som motsvarar en font, som du kan välja om den ska vara över-, genom-, och understruken samt fet och/eller kursiv stil. Då definierar man bitmönster för varje alternativ och låter tillämpningsprogrammerarna slå ihop olika bitmönster med | (bitvis OR), och så behöver man bara ett argument till funktionen/klassen.