Problem mit Einerkomplement

10/14/2017 17:25 xXKimariXx#1
Vorweg, ich weiß, dass man beim Einerkomplement die Zahlen einfach invertieren muss. Doch irgendwie komm ich bei dieser Aufgabe trotzdem nicht aufs Ergebnis:
[Only registered and activated users can see links. Click Here To Register...]
Ich muss es ins Dezimale umwandeln.

Das Einerkomplement ist doch dafür da, dass man negative Zahlen darstellen kann z.B 0001 = 1 -> 1000 = -1. 001001 Ergibt doch keine Negative Zahl oder? Ich hatte als lösung 54 raus aber bin extrem unsicher.

Danke im vorraus.
10/14/2017 21:04 Asuramaru#2
Im Einerkomplement bleiben positive Zahlen unverändert und negative werden Invertiert (jede Stelle!).
Ob eine Zahl negativ ist erkannt man dann am ganz linken bit.
1 = Negativ
0 = Positiv


0001 = 1
1110 = -1

001001 = 9
110110 = -9
10/15/2017 14:02 algernong#3
Eine andere Erklärung, die meiner Meinung nach etwas mehr Verständnis bringt.

Sagen wir, die Zahlen haben n Bits. Dann betrachte den Zahlenraum als Restklassenring Modulo (2^n)-1, d.h. man rechnet wie normal, nimmt das Ergebnis aber immer noch Modulo (2^n)-1.

Beispiel (n = 2): (2^n)-1 = (2^2)-1 = 3. Dann ist zum Beispiel 2 + 2 = 1 weil normal 2 + 2 = 4 und 4 mod 3 = 1.

In so einem Restklassenring gibt es mehrere Repräsentanten für das selbe Element.

Beispiel (n = 2): ..., -5, -2, 1, 4, 7, ... sind alles Repräsentanten für das selbe Element; oder: es gelten die ungewohnten Gleichheiten ... -5 = -2 = 1 = 4 = 7 ...
Allgemein: für alle z in Z ist x + z * ((2^n) - 1) das gleiche Element, x Element aus dem Restklassenring.

Jetzt ist das Einerkomplement schon klar: Man legt nur noch die Konvention fest, für die erste Hälfte des Zahlenraums die kleinsten positiven Repräsentanten zu wählen und für die zweite Hälfte die kleinsten negativen Repräsentanten zu wählen.

Beispiel (n = 2): Also wieder (2^n)-1 = 3 und man legt fest:
erste Hälfte: 0 = 0, 1 = 1
zweite Hälfte: 2 = -1, 3 = 0

Binär:
0: 00
1: 01
2 = -1: 10
3 = 0: 11

Deine Aufgabe:
Bei 101000 ist n = 6, also Modulo (2^6)-1 = 63
Dezimal ist 101000 = 40 = -23 und da 40 >= (2^6-1) in der zweiten Hälfte ist, nimmt man den negativen Repräsentanten -> -23.

Das ist zum Rechnen natürlich viel umständlicher und würde ich auch nicht machen, erklärt aber viel besser das System dahinter, finde ich :)

Zweierkomplement ist dann genau dasselbe nur Modulo 2^n statt (2^n)-1.
10/16/2017 07:46 Drewfire#4
#moved
10/25/2017 18:12 Freeze#5
Die einfachere Methode wäre wie @[Only registered and activated users can see links. Click Here To Register...] schrieb:

Du hast
1. 001001 => (2^0)+(2^3) = 9
2. 101000 =(invertieren)=> 010111 => (2^0)+(2^1)+(2^2)+(2^4) = 23; damit wieder zurück zum Einerkomplement bzw. zur Ausgangsbinärzahl: -23 (da beim Einerkomplement die positive Zahl nur negiert wird um die negative Zahl mit gleichem Betrag zu bekommen, deswegen ja auch 2x die 0 => 0000 +0; 1111 -0)