// 02_Primitives.java - 8 הטיפוסים הפרימיטיביים

public class Primitives {
    public static void main(String[] args) {
        // 4 טיפוסי מספר שלם
        byte b = 127;
        short s = 32000;
        int i = 2_000_000_000;
        long l = 9_000_000_000L;

        System.out.println("byte: " + b);
        System.out.println("short: " + s);
        System.out.println("int: " + i);
        System.out.println("long: " + l);

        // 2 טיפוסי מספר עשרוני
        float f = 3.14f;
        double d = 3.14159265358979;

        System.out.println("\nfloat: " + f);
        System.out.println("double: " + d);

        // תו ובוליאני
        char ch = 'A';
        boolean flag = true;

        System.out.println("\nchar: " + ch);
        System.out.println("boolean: " + flag);

        // טווחים של הטיפוסים
        System.out.println("\n--- טווחים ---");
        System.out.println("byte: " + Byte.MIN_VALUE + " עד " + Byte.MAX_VALUE);
        System.out.println("short: " + Short.MIN_VALUE + " עד " + Short.MAX_VALUE);
        System.out.println("int: " + Integer.MIN_VALUE + " עד " + Integer.MAX_VALUE);
        System.out.println("long: " + Long.MIN_VALUE + " עד " + Long.MAX_VALUE);

        // המרה אוטומטית (widening)
        int x = 100;
        long y = x;    // אוטומטי
        double z = y;  // אוטומטי
        System.out.println("\nwidening: " + x + " -> " + y + " -> " + z);

        // המרה מפורשת (casting)
        double pi = 3.14;
        int pInt = (int) pi;   // 3 - החלק העשרוני נחתך
        System.out.println("casting: " + pi + " -> " + pInt);

        // גלישה (overflow)
        int big = 300;
        byte small = (byte) big;
        System.out.println("גלישה: " + big + " -> " + small);

        // המרה בין char ל-int
        char letter = 'A';
        int code = letter;
        System.out.println("\n'A' כ-int: " + code);
        System.out.println("66 כ-char: " + (char) 66);
    }
}
