1.1 IT-Zahlensysteme

Die derzeitige Informationstechnik arbeitet mit Datenleitungen und Speichern, die nur zwei Zustände kennen:

0 und 1 -Binär.

Das Bit ist die kleinste Datenspeichereinheit und kann die Werte 0 oder 1 speichern, ein binärer Speicher.
Wenn ich mehr als 2 Werte speichern will muss ich mehr Bits kombinieren. Bsp. 2 Bits:

KombinationBit1Bit0
0000
0101
1010
1111
Kombinationen bei 2 Bits

Jedes weitere Bit verdoppelt die Anzahl der Kombinationen: Schreibe alle Kombinationen mit n Bits auf und schreibe überall links eine 0 davor, dann schreibe alle Kombinationen mit n Bit und einer 1 davor darunter:

Die Anzahl der möglichen Kombinationen mit n Bits lässt sich leicht berechnen: 2n


Wie viele Kombinationen gibt es mit 4 Bits, schreibe alle auf. Wie viele Bits braucht es für 16, 32, .. Werte?

KombinationBit2Bit1Bit0
000000
001001
010010
011011
100100
101101
110110
111111
Kombinationen bei 3 Bits
Bits1 2345678910111213141516
# Werte2481632641282565121024204840968192163843276865536
Auswendig können: Bits und Anzahl Werte

Binäre Kodierung von Information

Nun haben wir also Bits als Datenspeicher und können Kombinationen aufschreiben. Aber welche Bedeutung haben diese Kombinationen. Bsp. Die Werte 0..3 sollen binär gespeichert werden… Möglichkeiten…

Stellenwertsystem, Dualzahlen, Umrechnen siehe https://mezdata.de/ti-basis/010_zahlensysteme/index.php

Achtung Verwirrung: Binärzahl meint einfach die Darstellung von Information mit 0en und 1en. Dualzahl ist die Kodierung mit dem Stellenwertsystem eines Dezimalwertes in eine Binärzahl, also eine spezielle von vielen möglichen Kodierungen. Es gibt noch andere technisch praktische Kodierungen von Dezimalwerten zu Binärzahlen, z.B. der Gray-Code.

Welchen Wert hat die Größte-Dual-Zahl (GDZ) mit n Bit?

Bits1 23456789101112
GDZ
Dual
0b10b110b1110b11110b111110b1111110b11111110b111111119 1en10 1en11 1en12 1en
GDZ
Dez
137153163127255511102320474095
GDZ
Hex
0x10x30x70xF0x1F0x3F0x7F0xFF0x1FF0x3FF0x7FF0xFFF
Auswendig können. Bits und grösste Dualzahl

Besser lesbar durch Hexadezimalsystem

Viele 0en und 1en hintereinander sind schlecht lesbar, deshalb werden gerne 4 Bit zu einer Hexadezimal-Ziffer zusammen gefasst. Da 4 Bit die 16 (Hexadezimal) Werte von 0..15 haben können sind für die Werte 10..15 weitere Ziffern notwendig, deshalb werden schlicht die Buchstaben A..F dafür verwendet.

Wert1 2..8910111213141516
Dual0b00010b0010..0b10000b10010b10100b10110b11000b11010b11100b11110b10000
Hex0x10x2..0x80x90xA0xB0xC0xD0xE0xF0x10
Auswendig können: Dual- und Hex-Werte

4 Bit sind ein Nibble, 8 Bit sind ein Byte. 16 bzw. 32 Bit werden als Wort , 32 bzw. 64 Bit als Doppelwort bezeichnet. Siehe Wikipedia [Datenwort]. Umwandeln von Bin<->Hex, Dez<->Hex siehe https://mezdata.de/ti-basis/010_zahlensysteme/index.php

Einheiten KiB, MiB…

Sollen grössere Mengen von Bytes gut lesbar angegeben werden bieten sich Abkürzungen wie Kilo und Mega usw. an. Z.B. 1000 Byte = 1 kB (Kilobyte). Allerdings wird bei Speicherbausteinen nicht das Dezimal- sondern das Binärsystem verwendet, daher bekommt man eher 1024 Byte und nicht 1000 Byte. Dies führte zu Verwirrung:
[Wikipedia: Bedeutungen von Dezimal- und Binärpräfixen für große Anzahlen von Bytes]
Daher wurde für Anwendungen mit binär adressierten Speichern Binäreinheiten eingeführt Ki = 1024 statt k = 1000, das B wird oft weggelassen also Ki statt KiB, Mi statt MiB.
Hinweis: Das Wort oder der Begriff Anzahl oder Nummer wird oft mit # verkürzt: Anzahl Bits -> # Bits

# Bits zur Kodierung der Anzahl10203040506070
Wert210 = 1024220 = 10242230 = 10243240250260270
BezeichnungKiMiGiTiPiEiZi
Auswendig können: Bezeichnung grosser Wertebereiche

Praktischer Nutzen, typische Beispiele:
Wie viele Werte können mit 16 Bit kodiert werden? 216 = 26 * 210 = 64 Ki Werte
Wie viele Farben können mit 3 Byte kodiert werden? 3*8=24; 224 = 24 * 220 = 16 Mi Farben: ca. 16 Millionen Farben

ToDo: Negative Zahlen, Rechnen,

Auf meiner „alten“ Seite: https://mezdata.de/ti-basis/010_zahlensysteme/index.php

Spiel zum Üben: https://games.penjee.com/binary-numbers-game/

Arbeitsblatt zum Üben

Hier die Tabellenkalkulation um ein Arbeitsblatt zu erstellen, die Werte werden durch Zufall erzeugt.

Negative Zahlen

MezMedia: Datendarstellung in Digitalen Systemen
Wikipedia: Zweierkomplement

  1. Anzahl # der Bits im Datentyp wissen z.B. byte hat 8 Bit weil
  2. Das MSB (Most Significant Bit), das Bit ganz links gibt das Vorzeichen an
  3. MSB = 0 ist positiv, MSB = 1 ist negativ
  4. Vorzeichen wechseln also -zahl geht so:
    1. zahl binär hinschreiben
    2. Einerkomplement von zahl bilden: ~zahl (alle Bits umdrehen)
    3. Zweierkomplement ist -zahl = ~zahl + 1, einfach +1 machen und den Übertrag ignorieren.

Übung: 8-Bit Zahlen mit Vorzeichen (Java: byte, C: signed char, int8_t)

DezimalDualzahlHexadezimal
-10b111111110xFF
1270b011111110x7F
-1280b100000000x80
0x81
-2
0xAA
Binärdarstellung 8 Bit Zahlen mit Vorzeichen
Lösung
DezimalDualzahlHexadezimal
-1270b1000 00010x81
-20b1111 11100xFE
-860x1010 10100xAA
Binärdarstellung 8 Bit Zahlen mit Vorzeichen

Datentypen bei Java

https://docs.oracle.com/javase/8/docs/api/constant-values.html#java.lang🔗

Datentyp#Bits#WerteWertebereichC
boolean82false, true
byte8256-128..127 (-27..27-1)int8_t
char1665536 = 64 KiUnicode \u0000..\uFFFFF (0..216)uint16_t
short1665536= 64 Ki-32768..32767 (-215..215-1)int16_t
int32232 = 4 Gi-2 Gi..2 Gi -1 (-231..231-1)int32_t
long64264-263..263-1
float32232ca. +-1.4 * 10-45 .. +-3.4 * 1038
Genauigkeit ca. 7 Stellen
float
double64264ca. +-4.9 * 10-324 .. +-1.8 * 10308
Genauigkeit ca. 15 Stellen
double
Java Datentypen

🧠 Bonus: Ganze Zahlen in Dual mit Java ausgeben

public class Binaerausgeben{
  
  public static String classicToBin(int n){ // funktioniert für pos. Werte
    String s ="";
    while(n!=0){ // Klassicher Rest Div Algorithmus
      if(n%2==0) s='0'+s;
      else s='1'+s;
      n/=2;
    }
    return "0b"+s;
  }
  public static String byteToBin(byte n){ // auch neg. Werte möglich
    String s ="";
    for(byte m=0;m<8;m++){ // die Bits einzeln abfragen
      if((n&(1<<m))==0) s='0'+s;
      else s='1'+s;
    }
    return "0b"+s;
  }
  public static String intToBin(int n){
    String s ="";
    for(int m=0;m<32;m++){  // die Bits einzeln abfragen
      if((n&(1<<m))==0) s='0'+s;
      else s='1'+s;
    }
    return "0b"+s;
  }
  public static void test(){
    int i = -1;
    System.out.println(i%2);// Test für Modulo bei neg. Zahl
  }
  public static void ausgebenTabelle(){
    System.out.println("\fDezimal  Dual     Hex");  
    for(byte b=-128;b<0;b++){
      System.out.format("%4d  %s  0x%X\n",b,byteToBin(b),b); 
    }
  }
}
Ausgabe Tabelle mit negativen Byte-Werten
Dezimal  Dual  Hex
-128  0b10000000  0x80
-127  0b10000001  0x81
-126  0b10000010  0x82
-125  0b10000011  0x83
-124  0b10000100  0x84
-123  0b10000101  0x85
-122  0b10000110  0x86
-121  0b10000111  0x87
-120  0b10001000  0x88
-119  0b10001001  0x89
-118  0b10001010  0x8A
-117  0b10001011  0x8B
-116  0b10001100  0x8C
-115  0b10001101  0x8D
-114  0b10001110  0x8E
-113  0b10001111  0x8F
-112  0b10010000  0x90
-111  0b10010001  0x91
-110  0b10010010  0x92
-109  0b10010011  0x93
-108  0b10010100  0x94
-107  0b10010101  0x95
-106  0b10010110  0x96
-105  0b10010111  0x97
-104  0b10011000  0x98
-103  0b10011001  0x99
-102  0b10011010  0x9A
-101  0b10011011  0x9B
-100  0b10011100  0x9C
 -99  0b10011101  0x9D
 -98  0b10011110  0x9E
 -97  0b10011111  0x9F
 -96  0b10100000  0xA0
 -95  0b10100001  0xA1
 -94  0b10100010  0xA2
 -93  0b10100011  0xA3
 -92  0b10100100  0xA4
 -91  0b10100101  0xA5
 -90  0b10100110  0xA6
 -89  0b10100111  0xA7
 -88  0b10101000  0xA8
 -87  0b10101001  0xA9
 -86  0b10101010  0xAA
 -85  0b10101011  0xAB
 -84  0b10101100  0xAC
 -83  0b10101101  0xAD
 -82  0b10101110  0xAE
 -81  0b10101111  0xAF
 -80  0b10110000  0xB0
 -79  0b10110001  0xB1
 -78  0b10110010  0xB2
 -77  0b10110011  0xB3
 -76  0b10110100  0xB4
 -75  0b10110101  0xB5
 -74  0b10110110  0xB6
 -73  0b10110111  0xB7
 -72  0b10111000  0xB8
 -71  0b10111001  0xB9
 -70  0b10111010  0xBA
 -69  0b10111011  0xBB
 -68  0b10111100  0xBC
 -67  0b10111101  0xBD
 -66  0b10111110  0xBE
 -65  0b10111111  0xBF
 -64  0b11000000  0xC0
 -63  0b11000001  0xC1
 -62  0b11000010  0xC2
 -61  0b11000011  0xC3
 -60  0b11000100  0xC4
 -59  0b11000101  0xC5
 -58  0b11000110  0xC6
 -57  0b11000111  0xC7
 -56  0b11001000  0xC8
 -55  0b11001001  0xC9
 -54  0b11001010  0xCA
 -53  0b11001011  0xCB
 -52  0b11001100  0xCC
 -51  0b11001101  0xCD
 -50  0b11001110  0xCE
 -49  0b11001111  0xCF
 -48  0b11010000  0xD0
 -47  0b11010001  0xD1
 -46  0b11010010  0xD2
 -45  0b11010011  0xD3
 -44  0b11010100  0xD4
 -43  0b11010101  0xD5
 -42  0b11010110  0xD6
 -41  0b11010111  0xD7
 -40  0b11011000  0xD8
 -39  0b11011001  0xD9
 -38  0b11011010  0xDA
 -37  0b11011011  0xDB
 -36  0b11011100  0xDC
 -35  0b11011101  0xDD
 -34  0b11011110  0xDE
 -33  0b11011111  0xDF
 -32  0b11100000  0xE0
 -31  0b11100001  0xE1
 -30  0b11100010  0xE2
 -29  0b11100011  0xE3
 -28  0b11100100  0xE4
 -27  0b11100101  0xE5
 -26  0b11100110  0xE6
 -25  0b11100111  0xE7
 -24  0b11101000  0xE8
 -23  0b11101001  0xE9
 -22  0b11101010  0xEA
 -21  0b11101011  0xEB
 -20  0b11101100  0xEC
 -19  0b11101101  0xED
 -18  0b11101110  0xEE
 -17  0b11101111  0xEF
 -16  0b11110000  0xF0
 -15  0b11110001  0xF1
 -14  0b11110010  0xF2
 -13  0b11110011  0xF3
 -12  0b11110100  0xF4
 -11  0b11110101  0xF5
 -10  0b11110110  0xF6
  -9  0b11110111  0xF7
  -8  0b11111000  0xF8
  -7  0b11111001  0xF9
  -6  0b11111010  0xFA
  -5  0b11111011  0xFB
  -4  0b11111100  0xFC
  -3  0b11111101  0xFD
  -2  0b11111110  0xFE
  -1  0b11111111  0xFF