Zweierkomplement (Datentypen, Variablen und Ausdrücke)
Im Zweierkomplement (= Binärkomplement) werden die positiven Zahlen (inkl. der Null) einfach im Binärsystem dargestellt (0 = 0000 0000, 1 = 0000 0001, 2 = 0000 0010, 3 = 0000 0011, ...). Die negativen Zahlen jedoch werden wie folgt dargestellt: Die Zahl -1 wird durch lauter binäre Einerziffern dargestellt (-1 = 1111 1111), jede um Eins kleinere Zahl wird auch durch eine um Eins kleinere Binärzahl dargestellt (-2 = 1111 1110; -3 = 1111 1101, -4 = 1111 1100, -5 = 1111 1011, ...).
- Stellen Sie die folgenden (Zweierkomplement-)Binärzahlen dezimal dar:
- 1110 1011
- 1110 1110
- 1101 1100
- Schreiben Sie im Zweierkomplement: -6, -8, -17, -97, +5
-
Berechnen Sie die folgenden Subtraktionen (bzw. Additionen) im Zweiersystem. Verwenden Sie ausschließlich binäre Darstellungen. Schreiben Sie die negativen Zahlen zunächst im Zweierkomplement, damit Sie zur Lösung ausschließlich binäre Additionen verwenden.
- 0 - 1
- -1 - 1
- 1 - 2
- 2 - 3
- 18 - 5
- 5 - 13
- -32 - 16
- -25 + 9
Beispiel: -13 - 5 = (-13) + (-5) = 1111 0011 + 1111 1011 = 11110 1110 = -18
0 Kommentare
2 Lösung(en)
def zweierkomp(s,wortlaenge):
if s[0] == '1':
return int(s,2)-int(1 << wortlaenge)
else:
return int(s,2)
def zweierkompbin(s,wortlaenge):
k = len(s)
zeichen = s[0]
betrag =s[1:k]
if zeichen == '-':
wert = int(1 << wortlaenge)-int(betrag)
else:
wert = int(betrag)
return bin(wert)
print '8Bit: 1111 1010 ---> '+str(zweierkomp('11111010',8))
print '8Bit: 0001 1111 ---> '+str(zweierkomp('00011111',8))
print '8Bit: 1110 1011 ---> '+str(zweierkomp('11101011',8))
print '8Bit: 1110 1110 ---> '+str(zweierkomp('11101110',8))
print '8Bit: 1101 1100 ---> '+str(zweierkomp('11011100',8))
print '8Bit: -6 ----> '+str(zweierkompbin('-6',8))
print '8Bit: -8 ----> '+str(zweierkompbin('-8',8))
print '8Bit: -17 ----> '+str(zweierkompbin('-17',8))
print '8Bit: +5 ----> '+str(zweierkompbin('+5',8))
function convert2sComp(input, bits = 8) {
if (typeof input == 'string') {
input = input.padStart(bits, '0');
if (input[0] == '1') return -(2 ** bits - parseInt(input, 2));
else return parseInt(input, 2);
} else {
if (input >= 0) return input.toString(2).padStart(bits, '0');
else return (2 ** bits + input).toString(2);
}
}
// test
for (let i of [
'101', '11101011', '11101110', '11011100', -6, -8, -17, -97, 5
]) console.log(`${i} -> ${convert2sComp(i)}`);
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
Verifikation/Checksumme:
A) -21, -18, -36
B) 1111 1010, 1111 1000, 111110 1111, 1001 1111, 0000 0101
C) Verifikation trivial.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 1 |
Schwierigkeit: | k.A. |
Webcode: | kjb8-rjjm |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |