En integer (eller en hvilken som helst annen datatype) er jo ikke annet en enn streng av 1ere og 0er. Jeg bruker dem som true / false verdier for å sette checked-verdien på checkbokser. Hvis vi ser på en 8-bits (unsigned) integer, kan den brukes til å sette 8 checkboxer. Noen programmeringsspråk har funksjoner for å "plukke ut" bitene fra en integer, jeg har nikke funnet det i Delphi, men det er ikke vanskelig å gjøre manuelt, vi må bare vite hva bitene står for:
Bit | Verdi når 1 |
0 | 2^0 = 1 |
1 | 2^1 = 2 |
2 | 2^2 = 4 |
3 | 2^3 = 8 |
4 | 2^4 = 16 |
5 | 2^5 = 32 |
6 | 2^6 = 64 |
7 | 2^7 = 128 |
Når vi vet hvilke bit som er satt, er det bare å legge sammen verdien for dem, fx: 00100101, teller fra høyre og får at bit 0,2 og 5 er satt, binært 00100101 blir med andre ord 1+4+32 = 37.
Det er litt vanskeligere å regne ut den andre veien. En måte å gjøre det på, er å begynne med tallet for den høyeste biten, i dette tilfellet 128. Dersom tallet som skal kodes binært er mindre enn det (128), er biten ikke satt, og vi går videre med neste tall nedover. Dersom det er større, er biten satt, vi trekker fra tallet vi skjekket mot (128) fra tallet som skal kodes og forsetter videre nedover
Hva blir 71 i binært?
Tallet er < 128, så bit 7 er ikke satt, vi fortsetter med 64. 71 > 64,
så bit 6 er satt og vi trekker 64 fra 71 og får 7, Så ser vi
at 7 < 32, 7 < 16 og 7 < 8, så bit 5,4 og 3 er ikke
satt. 7 > 4, så bit 2 er satt, 7-4 = 3 og 3 > 2, så
bit 1 er satt, tilslutt, 3-2 = 1 og 1=1, så bit 0 er
satt
71 binært blir 01000111
I CBTest.zip har jeg laget et lite program som demonstrerer dette.
Skriv inn en verdi i ruten oppe til venstre,
trykk [Sett] og den vises i checkboxene. Sett noen av checkboxene
og trykk [Les] og verdien fra checkboxene vises ved siden av [Les]-knappen.
Kontakt meg på webmaster@sickel.net for kommentarer eller spørsmål om dette programmet