Gyakorlati alapok
Átváltás számrendszerek között
A hétköznapi számítások során tízes (decimális) számrendszerben gondolkodunk és dolgozunk.
A tízes (decimális) számrendszer 10 db számjegyet tartalmaz (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), helyiértékei a 10 hatványai.
A számítógép is ismeri a tízes (decimális) számrendszert, ám csak adatmegjelenítéskor és adatbekéréskor alkalmazza, mert egyéb műveletei során a kettes, nyolcas, sőt tizenhatos számrendszerekbe konvertálja, illetve ezeket folyamatosan váltja is egymásba.
-
A kettes (bináris) számrendszerben 2 db (0, 1),
-
a nyolcasban (oktális) 8 db (0, 1, 2, 3, 4, 5, 6, 7),
-
és a tizenhatos (hexadecimális) számrendszerben 16 db (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) számjegy van.
A számrendszerek közti átváltást a Java nyelv natívan képes támogatni. Alapértelmezésben a numerikus adatok bekérése és megjelenítése a számítógépen tízes számrendszerben történik, ez az alap. Egy numerikus adatdeklarációnál tehát tízes számrendszerbeli adatot vár a számítógép (például int szam = 4) és az eredményt szintén ebben kapjuk vissza. Azonban lehetőségünk van más számrendszer szerint is beadni (és megjeleníteni) adatot:
-
kettes számrendszer esetén a deklarált szám elé 0b vagy 0B prefixumot kell tenni,
-
nyolcas számrendszer esetén a deklarált szám elé 0 prefixumot kell tenni,
-
tizenhatos számrendszer esetén a deklarált szám elé 0x vagy 0X prefixumot kell tenni.
public class Main {
public static void main(String[] args) {
int szamTizesRendszer = 267;
int szamKettesRendszer = 0b100001011;
int szamNyolcasRendszer = 0413;
int szamTizenhatosRendszer = 0x10B;
System.out.println(szamTizesRendszer);
System.out.println (szamKettesRendszer);
System.out.println(szamNyolcasRendszer);
System.out.println (szamTizenhatosRendszer);
}
}
Végeredmény (például):
267
267
267
267
Most nézzünk egy gyors összeadást, amelyet csakis bináris számokon végzünk el:
public class Main {
public static void main(String[] args) {
int a = 0b111;
int b = 0b110;
int c = a + b;
System.out.println(a + " + " + b + " = " + c);
}
}
Végeredmény:
7 + 6 = 13
Az átváltás annyira automatikus, hogy a kiírás természetesen decimális lesz.
Ha meg kívánjuk tartani az eredeti bináris számformátumot, belső, beépített függvényhez kell nyúlnunk, ez az Integer.toBinaryString(a).
public class Main {
public static void main(String[] args) {
int a = 0b111;
int b = 0b110;
int c = a + b;
System.out.println(a + " + " + b + " = " + c);
System.out.println(Integer.toBinaryString(a) + " + " +
Integer.toBinaryString(b)
+ " = " + Integer.toBinaryString(c));
}
}
Végeredmény:
7 + 6 = 13
111 + 110 = 1101