hej
er der nogle som kan forklare hvordan man bruger bitvis opratorer, altså <<, >>, | osv.
på forhånd tak
adam
Køb en zebra - og kald den plet
For at kunne forstå hvad en bitvis operator gør er det vigtigt at vide hvordan et binært tal er opbygget. Binære tal er ligesom "almindelige" tal opbygget vha. et talsystem, hvor basen er 2 istedet for de almindelige 10.
...og hvad betyder det så?
Normale tal er opbygget således,
17648 = 1*10^4 + 7*10^3 + 6*10^2 + 4*10^1 + 8*10^0 (10 talssystemet)
Det samme gør sig gældende for binære tal, men eftersom basen er 2 opbygges tallet kun vha. 1 og 0'er istedet for de sædvanlige 0-9, altså
0101 = 0*2^3 + 1*2^2 + 0*2^1+ 1*2^0 (2 talssystemet) (= 5)
Et binært heltal (integer) består altså af 32-bit (1 eller 0'er) og er ofte repræsenteret på 2-complement form, hvilket betyder den mest betydende bit (længst til venstre i Java) repræsenterer - 2^31 (eller -2.1247.483.548). Det giver en range på Java's heltal på -2^31 til 2^31-1.
Altså, antager man at nedenstående binære tal er på 2-complement form, så giver det
11111 = -1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 (= -1)
Rent faktisk gælder det, at alle 2-complement tal er lig -1 hvis alle dets bit er 1, ligemeget hvor mange bit tallet beståer af! ...prøv evt. at regne lidt på det hvis du ikke tror på mig :o)
Nå, men tilbage til spørgsmålet.
Java har en række bitvise operatorer som gør det muligt at bit-manipulere med dets primitive heltalstyper. Jeg demonstrer kun et lille udsnit herunder, men du fanger nok ideen.
>> (right shift)
int x = 5; // 0...0101 (= 5)
x = x >> 2; //skubber bit-mønsteret 2 pladser til højre
System.out.println(x); // udskriver 1 til skærmen, fordi det nye bit-mønster er 0...0001 (= 1)
Tilsvarende findes der også en left shift operator, samt endnu en right shift operator som er ikke er fortegnsbevarende.
| (bitvis or)
int x = 5; // 0...0101 (= 5)
x = x | 2; //fortager en bitvis or operation af de 2 bitmønstre (husk alle tal er binære)
System.out.println(x); // udskriver 7 til skærmen, fordi det nye bit-mønster er 0...0111 (= 7)
Bitvise boolske operatorer fortager altså en boolsk sammenligning mellem de respektive bit. Tilsvarende findes der også bitvis AND, NOT og XOR.
Det var en længere smøre, men jeg håber du blev lidt klogere.
[Redigeret d. 25/08-03 19:14:29 af Erik K. Aarslew-Jensen]