Java: Warum ist int kleiner als float?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

int verwendet alle Bits zum Speichern der Zahl selbst, reicht also von -2^31 bis 2^31 - 1

float teilt seine Bits in 3 Teilbereiche ein: Vorzeichen (Sign), Exponent und Mantisse. 

Die Aufteilung sieht dabei so aus:

S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

Berechnet wird die Zahl dann mit einer Formel, die (vereinfacht) so aussieht:

M * 2^E

So kann zwar eine große Spanne an Zahlen dargestellt werden, aber die Genauigkeit bei großen Zahlen lässt natürlich nach. Wenn die Mantisse beispielsweise 5.43783 ist und mit 10^15 multipliziert wird, hast du 543783, gefolgt von 10 Nullen. float kann aber nichts genaueres über diese Nullen sagen.

Andersrum, wenn man sehr kleine Zahlen hat (negativer Exponent), verschiebt sich diese Mantisse natürlich hinter die Kommastelle und die Zahl wird umso genauer.

Also das liegt daran wie diese Datentypen abgespeichert werden. Der Integer mit 32bit kann von 0 bis 4.294.967.295 oder 2^32 zählen. Wenn man ein Vorzeichen auch noch berücksichtigt verschiebt sich der Wertebereich zu den von dir genannten -2.147.483.648 bis 2.147.483.647.

Gleitkommazahlen werden jedoch anders gespeichert. Hier ist in der Regel 1bit für das Vorzeichen v reserviert und die Zahl wird als Produkt von Mantisse(23bit) m und Exponent(8bit) e berechnet. X=(-1)^v * m * 2^e

Dadurch lassen sich mit Gleitkommazahlen deutlich größere Zahlen darstellen.



Hallo als Anfänger solche Fragen zu haben zeigt, dass du tatsächlich versuchst die Materie zu verstehen. Dafür schon einmal ein dickes Lob.

Grundsätzlich hast du recht. Int benutzt den ganzen Wertebereich für die Ganzzahl. Also kann alles zwischen −2^31 bis 2^31 − 1 dargestellt werden.

Bei float ist es ein wenig anders, da wie du richtig erkannt hast ja auch noch die Nachkommastellen speichern musst. Die 32 bit unterteilen sich in 1 Bit für das sign-bit. 8 Bit für den Exponenten und 23 Bit für die Mantisse.

die darstellbaren Zeichen berechnen sich also im Grunde wie folgt:

Zahl die in der Mantisse gespeichert ist * 2 (Weil + und -)^ Exponent

So entsteht dann der von dir angegebene Zahlenraum.

Lg Julian

Java Hamstersimulator, Int Rückgabewert von Int Methode in main Methode weiterverwenden, Kommt immer 1 raus?

Wie oben schon beschrieben, habe ich im Java Hamstersimulator eine int- Methode in der Ich etwas zählen möchte. Wenn ich diese int- Methode in der main-Methode öfters aufrufen will setzt das Programm den Wert entweder auf 0 oder auf 1. Doch zählt nicht weiter.

Hier der Code:

http://pastebin.com/Xg3Un5AN

...zur Frage

[JAVA] Auf eine Methode in einer anderen Klasse zugreifen?

import static java.lang.System.out;
import java.util.Scanner;

public class Datentypen {
@SuppressWarnings("unused")
public static void main(String[] args){
    
    Scanner  keyboard = new Scanner(System.in);
    
    out.println("In Java gibt es viele verschiedene Datentypen. Da ich Ihnen die Unübersichtlichkeit sparen möchte,");
    out.println("habe ich dieses Programm geschrieben. Dieses Programm enthält jeweils ein Beispiel zu je einem Datentypen.");
    out.println("Also, worauf warten Sie? Suchen Sie sich einen Datentypen aus!");
    out.println();
    out.println("Boolean        Char");
    out.println("Byte       Short");
    out.println("Int        Long");
    out.println("Float      Double");
    
    String datentypen  = keyboard.next();
            
    switch(datentypen){
    case "Boolean":
        booleantyp();              //Fehler ist hier!
    }
    }


}

Zweite Klasse:

public class DatentypenMethoden {
public static void maint(String[] args){
    
}

public void booleantyp(){
    
}
}

Wie greife ich jetzt von der Klasse Datentypen auf die Methode "booleantyp()"?

...zur Frage

Java integer und andere Datentypen in andere "files" des gleichen projekts übergeben?

Hier ein Bsp.: int a = 2; a soll von bsp_1 in bsp_2 übergeben werden mit einem befehl aber wie stelle ich das an? Ich Hoffe ihr versteht meine Frage wenn nicht bitte einfach in Form einer Antwort Fragen! Danke im Voraus! Ps. Bin ein Anfänger

LG Adman

...zur Frage

Wie lautet die Definition der Datentypen int und void bei Java?

...zur Frage

Gibt es ein Gegenteil zur small-float in c#?

Moin,

ich möchte möglichst wenig platz für meine Werte verbrauchen, da ich ein android-game entwickel. Mir ist bekannt, das einer Integer wesentlich weniger bits bereitstellt werden, als eine float. Jedoch brauche ich Dezimalwerte zu diversen Multiplikationen, wobei diese nie mehr als 2 Nachkommastellen haben. Meine eigentliche frage ist nun also: Ist es möglich den Bitsatz, der einer float bereitgestellt wird zu verringern? Wenn man ihn mit der small-float erweitern kann..

vielen Dank im Voraus!

beste Grüße, KayB14

...zur Frage

Division bei int oder double datentypen java

Hey ihr! Kann mir jemand den Unterschied erklären ob ich "/" zur Division bei Double oder Int Datentypen anwende?

...zur Frage

Was möchtest Du wissen?