Typcasting zwischen ganzen Zahlen

mustinet1900

Mitglied
Hi Leute,


ich habe in 2 Wochen meine Java Klausur und wollte euch mal bei ner Kleinigkeit was fragen.

Es geht um das Thema Typcasting, also implizit und explizit.
Soweit komme ich da auch ganz gut zu recht, aber bei dem expliziten in dem man von einem grßen ganzzahligen Wert zu einen kleineren castet bin ich noch nicht so aufm Baum.

Bspl. int 257 in byte .

In der Lösung wird angegeben das 257 im Binärsystem 100000001 ist, also 9 Stellen.
byte hat 8 Bits.Deshalb wird aus der 257 -> 00000001.
Das erste Bit wird abgeschnitten.


So jetzt der Punkt der mich verwirrt.
Im Skript steht : Bei der Konvertierung eines größeren Ganzzahltyps in einen kleineren werden die oberen Bits abgeschnitten und als Bsp. steht dort noch :

int i = 385; byte a = (byte) i; ergibt a = -127

Fragen :
1. Warum wird oben bei der 257 die eins am Anfang abgeschnitten und nicht am Ende?
Im Skript steht doch das die oberen Bits abgeschnitten werden.

2. Das Bspl. Nr. 2 , also die 385 nach -127 als byte Wert.Kann mir jemand erklären wie man darauf kommt?

3. Kann oder muss man eigentlich diese Umwandlung in die Binärwerte aus dem Kopf können?
Wollte nämlich die 385 als Binärwert
darstellen so wie es mit der 257 gemacht wurde, aber die Binär Rechner die ich gegoogelt habe z.B.

NickCiske.com | Binary - it's digitalicious!

hier spuckt bei dem Wert 257 viel längere Zahlen raus als ich auf meinem Blatt habe ( 257 = 00110010 00110101 00110111 00001101 00001010 )

dankeschön

Grüße
 

pro2

Bekanntes Mitglied
3. Kann oder muss man eigentlich diese Umwandlung in die Binärwerte aus dem Kopf können?
Wollte nämlich die 385 als Binärwert
darstellen so wie es mit der 257 gemacht wurde, aber die Binär Rechner die ich gegoogelt habe z.B.

NickCiske.com | Binary - it's digitalicious!

hier spuckt bei dem Wert 257 viel längere Zahlen raus als ich auf meinem Blatt habe ( 257 = 00110010 00110101 00110111 00001101 00001010 )

Die Umwandlung solltest du schon können, aber ich sag mal gerade die in Binärwerte ist ja recht einfach. Und der Rechner den du da gefunden hast, der macht nicht das was du suchst.
Umrechnung von Zahlensystemen (da gibts auch ne ganz tolle Erklärung dazu!)
Sowas suchst du eher. Das was du da gefunden hast, gibt dir die Binärwerte für die Zeichen, wenn ich das richtig verstanden habe.
Aber selbst der Windowsrechner kann diese Umrechnung, einfach auf den "Programmer" (im englischen Windows zumindest) Modus umstellen.

Fragen :
1. Warum wird oben bei der 257 die eins am Anfang abgeschnitten und nicht am Ende?
Im Skript steht doch das die oberen Bits abgeschnitten werden.

Die oberen Bits sind ja die linken, das rechts ist das 1. Bit :p
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
385 ist Binär 110000001
vordere Bit(s) abgeschnittet = 10000001
Da das vordere Bit gesetzt ist, ist es als eine negative Zahl markiert. Das ist bei 257 eben anders
100000001 = 00000001 = 1 (8.Bit nicht gesetzt)

Java ist auch eine Insel – 2.3 Datentypen
Bei der Konvertierung eines größeren Ganzzahltyps in einen kleineren werden einfach die oberen Bit abgeschnitten. Eine Anpassung des Vorzeichens findet nicht statt. Die Darstellung in Bit zeigt das sehr anschaulich:

int ii = 123456789; // 00000111010110111100110100010101
int ij = –123456; // 11111111111111100001110111000000
short si = (short) ii; // 1100110100010101
short sj = (short) ij; // 0001110111000000
System.out.println( si ); // –13035
System.out.println( sj ); // 7616
sj wird eine negative Zahl, da das 16. Bit beim int ii gesetzt war und nun beim short das negative Vorzeichen anzeigt. Die native Zahl ij hat kein 16. Bit gesetzt, und so wird das short sj positiv.
 

Marco13

Top Contributor
1. Warum wird oben bei der 257 die eins am Anfang abgeschnitten und nicht am Ende?
Im Skript steht doch das die oberen Bits abgeschnitten werden.

"Oben" ist "links" ;)


2. Das Bspl. Nr. 2 , also die 385 nach -127 als byte Wert.Kann mir jemand erklären wie man darauf kommt?

Dort steht doch sicher auch einges zu Zweierkomplement und Vorzeichenbits?!

3. Kann oder muss man eigentlich diese Umwandlung in die Binärwerte aus dem Kopf können?
Wollte nämlich die 385 als Binärwert
darstellen so wie es mit der 257 gemacht wurde, aber die Binär Rechner die ich gegoogelt habe z.B.

NickCiske.com | Binary - it's digitalicious!

hier spuckt bei dem Wert 257 viel längere Zahlen raus als ich auf meinem Blatt habe ( 257 = 00110010 00110101 00110111 00001101 00001010 )

Öhm... so aufwändig ist das nicht:
Code:
Nach jedem Schritt durch 2 Teilen und den Rest abschneiden:
385 ist ungerade: 1
192 ist   gerade: 0
 96 ist   gerade: 0
 48 ist   gerade: 0
 24 ist   gerade: 0
 12 ist   gerade: 0
  6 ist   gerade: 0
  3 ist ungerade: 1
  1 ist ungerade: 1

Was die verlinkte Seite macht ist... wohl den ASCII-Code der einzelnen Zeichen (!) binär darzustellen. Binär kann jeder vernünftige Taschenrechner - UND der Windows-Taschenrechner...
 

mustinet1900

Mitglied
Umrechnung von Zahlensystemen (da gibts auch ne ganz tolle Erklärung dazu!)
Sowas suchst du eher. Das was du da gefunden hast, gibt dir die Binärwerte für die Zeichen, wenn ich das richtig verstanden habe.

Die oberen Bits sind ja die linken, das rechts ist das 1. Bit :p

Die Seite hatte ich auch gefunden nur wurde da nicht so recht schlau.
Hatte im Bereich Zahlensystem 3 gewählt, weil 385 dreistellig ist und dann stand da rechts NaN, also not a number.

385 ist Binär 110000001
vordere Bit(s) abgeschnittet = 10000001
Da das vordere Bit gesetzt ist, ist es als eine negative Zahl markiert. Das ist bei 257 eben anders
100000001 = 00000001 = 1 (8.Bit nicht gesetzt)

Also immer wenn am Anfang statt ner null eine 1 steht ist es negativ.
Und wenn ich von gross auf klein caste wird bei ganzen Zahlen immer die erste Zahl abgeschnitten?

"Oben" ist "links" ;)




Dort steht doch sicher auch einges zu Zweierkomplement und Vorzeichenbits?!



Öhm... so aufwändig ist das nicht:
Code:
Nach jedem Schritt durch 2 Teilen und den Rest abschneiden:
385 ist ungerade: 1
192 ist   gerade: 0
 96 ist   gerade: 0
 48 ist   gerade: 0
 24 ist   gerade: 0
 12 ist   gerade: 0
  6 ist   gerade: 0
  3 ist ungerade: 1
  1 ist ungerade: 1


Mehr steht im Skript leider nicht dazu und über Binär steht eigentlich nix, also das Wort binär taucht auch gar nicht auf .Es gibt da nur das Bsp mit 385, also die Konvertierung von int nach byte.

Das einzige wo das Wort binär vor kommt ,war im Kommentar zur Übungsaufgabe mit der 257.

Ist der obige Ablauf bei jeder Zahl gleich?
Und wenn ich den binär Wert dann habe, wie komme auf die -127 als Byte ?

Hab mal ein Bsp wie oben gemacht :

250 gerade 0
125 ungerade 1
62 gerade 0
31 ungerade 1
15 ungerade 1
7 ungerade 1
3 ungerade 1
1 ungerade 1

Ist das ungefähr richtig?

Und wenn ich die Binär Zahl dann habe, wie gehts weiter?
Sagen wir mal ich will int 250 nach byte konvertieren.

Dann weiss ich jetzt die Binärzahl und wie mache ich den Rest?

Bisher schon ganz herzlichen Dank für die Anworten.
 
Zuletzt bearbeitet:

mustinet1900

Mitglied
Da wäre noch das mit der 1 bei 257.

Also binär Zahl ist ja 1000000001.
Am Anfang ist ne 1 gesetzt, deshalb positiv und die 1 am Anfang wird auch abgeschnitte, weil 8 Bit.

So der Compiler gibt jetzt bei dieser int zu byte konvertierung ne 1 raus.
Ist diese 1 die da am Anfang abgeschnitten wurde?

Denn nach dieser Rechnung müsste der Compiler bei 385 ja auch bei byte die abgeschnitten 1 ausgeben, aber da wird -127 ausgegeben
 

eRaaaa

Top Contributor
Da wäre noch das mit der 1 bei 257.

Also binär Zahl ist ja 1000000001.
Am Anfang ist ne 1 gesetzt, deshalb positiv und die 1 am Anfang wird auch abgeschnitte, weil 8 Bit.
Nein, du musst anders vorgehen, erst abschneiden, dann gucken ob vorne eine 1 steht. Und vorne 1 steht für negativ, nicht positiv!
1000000001 -> abschneiden -> 00000001 --> 1

Und das mit 385 hatte ich doch auch schon gesagt:

385 ist Binär 110000001 -> abgeschnittet = 10000001
Da nun vorne eine 1 steht, ist diese Zahl negativ (die eins vorne kannst du dir jetzt wegdenken) , also denkst du dir jetzt wieder
0000001 = 1.
-128+1 = -127
Nehmen wir mal eine Zahl höher, die 386
110000010 -> abschneiden -> 10000010 (0000010 = 2)
-128+2 = -126
usw.

Hab mal ein Bsp wie oben gemacht :

250 gerade 0
125 ungerade 1
62 gerade 0
31 ungerade 1
15 ungerade 1
7 ungerade 1
3 ungerade 1
1 ungerade 1

Ist das ungefähr richtig?
Ja, korrekt. Man könnte es auch anders schreiben
Code:
250 : 2 = 125  Rest: 0
125 : 2 =  62  Rest: 1
usw..
 
Zuletzt bearbeitet:

pro2

Bekanntes Mitglied
Die Seite hatte ich auch gefunden nur wurde da nicht so recht schlau.
Hatte im Bereich Zahlensystem 3 gewählt, weil 385 dreistellig ist und dann stand da rechts NaN, also not a number.

Oh mein Gott, nein! Die Anzahl der Stellen hat doch nichts mit dem Zahlensystem zu tun. Wir rechnen grundlegend im Dezimalsystem (10er), ein Computer tut dies im Binärsystem (2er). Noch andere rechte bekannte sind das Oktal- (8er) und Hexadezimale (16er).
Deine Zahl du hier gegeben hast ist die 385, diese ist dezimal dargestellt.
Die Fehlermeldung die sich dort ergibt, wenn du das 3er Zahlensystem wählst ist logisch, denn das 3er Zahlensystem kennt nur 3 Zahlen. Die 0, 1 und 2. Also sind ihm die 3, 5 und 8 fremd.
Genauso kennt das binäre Zahlensystem, wie du es ja bereits kennengelernt hast, nur zwei Zahlen, die 0 und die 1.
Und in dem uns üblicherweise bekannten dezimalen System gibt es 10 Zahlen. 0, 1, 2, ..., 8, 9. Die 10 würde sich ja wieder bilden aus einer 1 und einer 0. Also quasi aus zwei Zahlen.
Gehen wir noch weiter: Im Hexdezimalen System gibt es 16 Zahlen. 0, 1, 2, ..., 8, 9, A, B, C, D, E, F. Wolltest du also die uns bekannte 15 Hexadezimal schreiben, würde ein einfaches F reichen, um das darzustellen.

Und so kannst du jede Zahl aus dem 10er System heraus in ein anderes rechnen, im dem du schrittweise immer so vorgehst.
385 ins 2er System ->
Code:
     385 : 2 = 192  Rest: 1
     192 : 2 =  96  Rest: 0
      96 : 2 =  48  Rest: 0
      48 : 2 =  24  Rest: 0
      24 : 2 =  12  Rest: 0
      12 : 2 =   6  Rest: 0
       6 : 2 =   3  Rest: 0
       3 : 2 =   1  Rest: 1
       1 : 2 =   0  Rest: 1

     Resultat: 110000001

385 ins 3er System ->
Code:
     385 : 3 = 128  Rest: 1
     128 : 3 =  42  Rest: 2
      42 : 3 =  14  Rest: 0
      14 : 3 =   4  Rest: 2
       4 : 3 =   1  Rest: 1
       1 : 3 =   0  Rest: 1

     Resultat: 112021

385 ins 16er System ->
Code:
     385 : 16 =  24  Rest:  1   --> Ziffer: 1
      24 : 16 =   1  Rest:  8   --> Ziffer: 8
       1 : 16 =   0  Rest:  1   --> Ziffer: 1

     Resultat: 181

Es handelt sich also immer um die gleiche Anzahl von Elementen, nur anders dargestellt!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
W Typcasting Java Basics - Anfänger-Themen 16
S Typcasting und Methoden Java Basics - Anfänger-Themen 4
J Typcasting wie?? Java Basics - Anfänger-Themen 6
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
rafi072001 Assoziation zwischen Musiker und Label Java Basics - Anfänger-Themen 1
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
I Differenz zwischen LocalDateTime Java Basics - Anfänger-Themen 4
Leo_1789 Differenz ausrechnen zwischen denn idealgewicht und denn echten Gewicht Java Basics - Anfänger-Themen 7
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
N Berührung zwischen Rechtecken Java Basics - Anfänger-Themen 5
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
D Zufallszahl zwischen 10 und 99? Java Basics - Anfänger-Themen 5
J Objektzugriff zwischen disjunkten Klassen Java Basics - Anfänger-Themen 1
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
X Input/Output Höchste Temperaturschwankung zwischen 2 Tagen Java Basics - Anfänger-Themen 2
Bluedaishi der Monat zwischen zwei Datumsangaben Java Basics - Anfänger-Themen 15
R Threads Pause zwischen zwei Schleifen Java Basics - Anfänger-Themen 1
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
S Parameterübergabe zwischen zwei Programme Java Basics - Anfänger-Themen 4
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
K Klassen Array zwischen Klassen übergeben Java Basics - Anfänger-Themen 2
Arif OOP Die Bindung zwischen einem äußeren und einem inneren Objekt Java Basics - Anfänger-Themen 2
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6
V Zufallswert zwischen zwei Zahlen a und b Java Basics - Anfänger-Themen 12
H Datentypen Tage zwischen zwei Datums berechnen Java Basics - Anfänger-Themen 4
M Variable zwischen Klassen übergeben Java Basics - Anfänger-Themen 5
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
F Referenzen zwischen Methoden Java Basics - Anfänger-Themen 5
B Distanz zwischen zwei Punkten Java Basics - Anfänger-Themen 4
D Suche nach der Anzahl von Zonen zwischen zwei Punkten Java Basics - Anfänger-Themen 2
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Unterschiede zwischen equals und contains Java Basics - Anfänger-Themen 2
S Leerzeichen zwischen zwei Zeichen im String entfernen Java Basics - Anfänger-Themen 19
N Werte zwischen Klassen austauschen Java Basics - Anfänger-Themen 1
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
Thallius Best Practice Events zwischen eigenen Klassen Java Basics - Anfänger-Themen 2
A if-Anweisung zwischen zwei Punkten Java Basics - Anfänger-Themen 1
S Erste Schritte TAB-Wechsel zwischen TextFields Java Basics - Anfänger-Themen 1
B Relativer Pfad zwischen zwei Files Java Basics - Anfänger-Themen 2
M Drag & Drop - Interaktion zwischen Java und dem OS Java Basics - Anfänger-Themen 1
S Erste Schritte Tage zwischen 2 Daten berechnen Java Basics - Anfänger-Themen 6
Z Differenz zwischen 2 Daten berechnen, ohne importiere Funktionen! Java Basics - Anfänger-Themen 10
A Datum zwischen zwei Daten berechnen und in Tagen anzeigen Java Basics - Anfänger-Themen 4
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
M Länge der Strecke zwischen zwei Punkten Java Basics - Anfänger-Themen 10
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
T zwischen den Strings soll ein plus(+) stehen Java Basics - Anfänger-Themen 5
S Methoden Tage zwischen 2 Daten Java Basics - Anfänger-Themen 19
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
N Winckel zwischen zwei Punkten Java Basics - Anfänger-Themen 9
O Java unterschied zwischen Interface und Interface_Referenzen!!?? Java Basics - Anfänger-Themen 7
J Regex um Inhalte zwischen Tags zu ignorieren Java Basics - Anfänger-Themen 2
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
W Variablen zwischen Klassen übertragen Java Basics - Anfänger-Themen 8
jueki Präzision bei Typumwandlung zwischen double und String Java Basics - Anfänger-Themen 14
B Text zwischen geschweiften klammern Java Basics - Anfänger-Themen 11
T Abstand zwischen zwei Zeitstempeln errechnen. Java Basics - Anfänger-Themen 3
c_sidi90 Zeitberechnung zwischen 2 Daten und Zeitangaben Java Basics - Anfänger-Themen 9
E Inhalt zwischen zwei String auslesen? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben