Wann weiß ich ob ich eine Zahl im Binärsystem negativ interpretieren muss?

2 Antworten

Das kann man überhaupt nicht feststellen, das muss sich aus dem Zusammenhang ergeben. Ein Byte aus einer Codiertabelle ist ein verschlüsseltes Zeichen, ein Wert, das man zu einer Zahl addieren muss, ist ebenfalls eine Zahl und kann demnach auch negativ sein.

Der Rechner weiß das auch nicht, der weiß auch nicht, ob ein Speichereintrag ein Befehl oder ein Text ist. Muss er auch nicht wissen. Denn alles, was er von der Programmsteuerung bekommt, interpretiert er als Befehl, was er von der Datensteuerung bekommt, sind Daten. Welcher Art die Daten sind, erkennt er daran, was er mit den Daten machen muss. Und wehe, wenn er was Falsches bekommt. Das führt zu einem Programmabsturz wegen eines Ausnahmezustandes.

Das war übrigens auch mein erstes Verständnisproblem, das ich in den 60-ger Jahren hatte, als ich in der EDV begonnen habe. Informatik gab es damals nicht. Ich habe Maschinen- und Kraftfahrzeugbau studiert.

Dementsprechend muss man dem Rechner doch immer vorher sagen, wie er die Zahl interpretieren muss - stimmt das so?

Genau das.

Nehmen wir als Beispiel mal ein wenig C++:

int foo = -123;
std::cout << foo << std::endl;
//Ausgabe: -123
unsigned int bar = -123;
std::cout << bar << std::endl;
//Ausgabe: 4294967173

Sowohl foo als auch bar enthalten beide den Wert 11111111111111111111111110000101.

Allerdings wird dieser durch das kleine Wörtchen unsigned im zweiten Fall anders behandelt als im ersten.

P.S.: Im Speicher ist 11111111111111111111111110000101 nichts weiter als eine Bitfolge. Ob diese nun eine 32 Bit große Zahl, 2 je 16 Bit große Zahlen, 4 Textzeichen oder was auch immer darstellt lässt sich nur anhand der blanken Daten bestenfalls raten.