Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nur muss ich auch "11111111" zuweisen können, wie kann ich das anstellen? Daas wäre dann ja die 255 und "byte" geht ja nur von -127 bis 128... Gibt es da eine Lösung?
Ich muss ein Byte mit "11111111" über einen Stream schicken...
die Java-bytes sind ja nur eine Interpretation von Bits,
wenn du 1111111 schicken willst, dann ist das einer von 255 möglichen Byte-Werten,
da auch Java-byte 255 unterschiedliche Zustände kennt, kannst du dir ja ausmalen, das einer davon 11111111 sein muss,
nun noch bisschen nachlesen oder ausprobieren, welcher das wohl ist
Jaja, das haben wir gerne: Gleich von Streams reden, aber von Bits und Bytes keine Ahnung.
Was haben FF und 11111111 gemeinsam? Warum kann ein Computer nur mit vorzeichenlosen Ganzzahlen arbeiten? Und wie werden dann Zahlen mit Vorzeichen abgebildet? Einerkomplement? Zweierkomplement? Was ist überhaupt der Einer? Was ist der Zweier?
Was der Einer ist, solltest du bereits aus der Grundschule kennen. Den Zweier müsstest du eigentlich auch schon kennen - oder du weißt selbst nicht, was dieses 11111111 bedeutet.
byte b = Byte.parseByte("-1111111", 2); // - 127
b = Byte.parseByte("-10000000", 2); // - 128
b = Byte.parseByte("1111111", 2); // + 127
b = Byte.parseByte("10000000", 2); // peng....der byte ist zu klein
dass Java das minus-Bit nicht parsen kann, sehe ich auch schon lange als Bug an,
es bleibt einem doch nur, das erste Byte selber zu prüfen und in ein Minuszeichen umzuwandeln oder das geparste Byte dann zu negieren, oder?
bevor jemand auf höheren Dagtentyp verweist, das Extremum ist
Code:
public class Test {
public static void main(String[] args) throws Exception {
System.out.println(Long.toBinaryString(-3));
Long.parseLong(Long.toBinaryString(-3),2);
}
}
-> Exception
die Antworten von gast und Der Müde Joe klingen so 'klar geht das, nämlich so',
aber das kann doch niemand eine sinnvolle Alternative nennen, oder?
Java stellt mit denen Zuständen die Zahlen von -128 - +127 dar....
wenn du 0 - 255 möchtest musst du einen anderen Datentypen wählen zB int
Den kannst du dann ja in einen byte wandeln (welcher die Zahlen grösser als 127
als negative Zahlen darstellt...ist so..fertig... zB
Code:
public class Test {
public static void main(String[] args) {
for(int i = 0; i < 256; i++) {
if(i == 128) {
System.out.println("--------------signed skip: 128 begins----------------");
}
System.out.println("Binary: " +Integer.toBinaryString(toByte(i) & 0xFF) + " Number: " +i);
}
}
public static byte toByte(int i) {
if(i < 0 || i > 255) {
throw new IllegalArgumentException("Out of value: " + i);
}
byte signedByte;
if(i > 127) {
signedByte = (byte)(i - 256);
} else {
signedByte = (byte)i;
}
return signedByte;
}
}