Elméleti alapozás

Java-nyelv (egyszerű) adattípusai

 

Numerikus egész

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A numerikus egész bemeneti adatok egész számmal kifejezhető mennyiségi jellemzőket képesek tárolni.

 

Attól függően, hogy milyen jellegű az adat, illetve a programozónak mire van szüksége, a Java-nyelvben négyféle numerikus egésszel dolgozhatunk:

Az alábbi érdekes, futtatható Java-kódban kiírjuk a numerikus adattípusok alsó és felső tárolási határait:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    System.out.println(Byte.MIN_VALUE);
    System.out.println(Short.MIN_VALUE);
    System.out.println(Integer.MIN_VALUE);
    System.out.println(Long.MIN_VALUE);

    System.out.println();

    System.out.println(Byte.MAX_VALUE);
    System.out.println(Short.MAX_VALUE);
    System.out.println(Integer.MAX_VALUE);
    System.out.println(Long.MAX_VALUE);

    System.out.println();

    System.out.println(Float.MIN_VALUE);
    System.out.println(Double.MIN_VALUE);

    System.out.println();

    System.out.println(Float.MAX_VALUE);
    System.out.println(Double.MAX_VALUE);
    }
}
 

Végeredmény:

-128
-32768
-2147483648
-9223372036854775808

127
32767
2147483647
9223372036854775807

1.4E-45
4.9E-324

3.4028235E38
1.7976931348623157E308

 

No de mi értelme a kisebb típusú egészeknek, ha nagy adattartományokkal is dolgozhatunk? A kisebb típusok:

Az egyik legáltalánosabban használt numerikus egész az int (integer). Az integeres műveletek végeredménye általában szintén integer, de osztásnál és túl nagy számok esetében adatvesztés léphet fel. Az alábbi, futtatható kódban…

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int a = 7;
    int b = 10;
    System.out.println(a + b);
    System.out.println(a - b);
    System.out.println(a * b);
    System.out.println(a / b);
    }
}
 

Végeredmény:

17
-3
70
0

 

…az osztás már nem egész számmal kifejezhető eredményt ad, azonban mivel a kimeneti adat int típusú, adatvesztés lép fel, amelyet a fordító 0-val jelez. (Valójában az adat csonkolódik, egy másik igazán gyönyörű szakmai szóval letránkolódik.) A megoldás az úgynevezett kasztolás (típuskényszerítés): át kell konvertálnunk a típust egy olyan típusba, amely képes fogadni nem egész, lebegőpontos számokat (itt float).

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int a = 7;
    int b = 10;
    System.out.println(a + b);
    System.out.println(a - b);
    System.out.println(a * b);
    System.out.println((float)a / b);
    }
}
 

Végeredmény:

17
-3
70
0.7

 

Típuskényszeríthetünk akár "röptében" is (5 / 4f)...

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    System.out.println(5 / 4f);
    }
}
 

Végeredmény:

1.25

 

...mert f (float) nélkül az eredmény csonkolódna (1).

 

Ugyanezt kell tennünk (azaz kasztolnunk kell), ha a végeredmény várhatólag meg fogja haladni a beállított adattípus által tárolható adattartományt:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int a = 2147483647;
    int b = 2147483647;
    System.out.println(a + b);
    }
}
 

Végeredmény:

-2

 

A fenti kódban az összeadás hibás eredményt fog adni. A probléma megoldása:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int a = 2147483647;
    int b = 2147483647;
    System.out.println((long)a + b);
    }
}
 

Végeredmény:

4294967294

 

www.informatika-programozas.hu - Érdekes, futtatható Java-kód!

Érdekes futtatható Java-kód!

 

Most pedig nézzünk meg egy érdekes, futtatható Java-kódot, amely előregyártott-beépített függvények segítségével „bűvészkedik” az 50 számon (int szam = 50;). Például átváltja bináris, oktális, hexadecimális számra, megmondja az előjelét, stb.:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int szam = 50;
    System.out.println(Integer.SIZE + " bit");
    System.out.println(Integer.signum(szam));
    System.out.println(Integer.toBinaryString(szam));
    System.out.println(Integer.toOctalString(szam));
    System.out.println(Integer.toHexString(szam));
    System.out.println(Integer.class);
    }
}
 

Végeredmény:

32 bit
1
110010
62
32
class java.lang.Integer