Wpis z mikrobloga

#naukaprogramowania #java
Koledzy pomocy. Ucze sie juz jakis czas javy, a nie moge zrozumieć czemu tak jest:

int a = 1;
System.out.println(a/3);
System.out.println(a/3.0);
System.out.println((double) a/3);

chodzi tu o wyniki tego kodu:
1. 0
2. 0.3333..
3. 0.3333..

3 w miare rozumiem z konwersją itd, ale możecie mi jakoś wytłumaczyc 1 i 2?

  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Luk_1mex: masz liczby zmiennoprzecinkowe i całkowite. int to zmienna całkowita, wykonując działania matematyczne musisz mieć jasno określony typ jaki powstanie w wyniku. 2 zadziałała jako wartość zmiennoprzecinkowa, bo podzieliłeś przez 3.0 - przez kropkę liczba ta jest traktowana jako zmiennoprzecinkowa. 1 zwróci ci int, czyli 0, bo wartości są obcinane po przecinku, a w tym przypadku odcina ci te 3.
  • Odpowiedz
@Luk_1mex: W Javie jest niejawna konwersja typów. Wszystkie literały bez cześci ułamkowej traktowane są jako inty. Literały z kropką to double. Wyniki operacji, w których są dwa różne typy, mniej "pojemy" (int ma w Javie 32 bity, a double 64) i bardziej, promowane są do typu większego. W tym wypadku int / double = double. Z powyższych zasad wynika też, fakt, że np. linia byte b = 2 + 5;
  • Odpowiedz
@kitke: Ale byte b = 2 + 5; się skompiluje bez najmniejszego problemu :<
a to dlatego że kompilator ogarnie ile to 2 + 5 i wie że to mniej niż zakres byte.

jak by to były jakieś zmienne, wtedy sypnie.

Jako ciekawostke dodam że java nie potrafi dodawać bajtów, np: byte a = 2;byte b = 5;byte c = a
  • Odpowiedz