2016-11-04 2 views
0

Die Frage ist
Was sind Zweierkomplementnummern der folgenden 16-Bit-Zahlen?16-Bit Zweierkomplementnummer

1.0x3f9d

Meine Antwort ist:

0011111110011101 binär, weil 0x3f9d eine positive Zahl.

Allerdings sagten einige Leute, dass die Antwort:

Ich bin verwirrend, weil 1100000001100011 eine negative Zahl ist. Welches ist die richtige Antwort?

+4

'0011111110011101' ist korrekt.Was hat das mit C zu tun? – DeiDei

+1

Wenn die Eingabe positiv ist, ist das Ergebnis der Negation sicher negativ. (obwohl das Gegenteil nicht unbedingt zutrifft) – harold

Antwort

1

3F9Dh ist eine positive Zahl, gleichwertig zu 0011 1111 1001 1101 binär. Es macht nur Sinn, von Zweierkomplement zu sprechen, wenn eine Zahl negativ ist.

Sie könnten den Begriff Zweierkomplement Darstellung (einer Zahl) mit dem Algorithmus "Zweierkomplement von x berechnen" verwirren. Wenn Sie das Zweierkomplement von 3F9Dh berechnen würde, würden Sie in der Tat mit 1100 0000 0110 0011.

In C beenden Sie diese Berechnung tun könnte als

(uint16_t)~0x3F9D + 1 

, die

entspricht
(uint16_t)-0x3F9D 

(angenommen Zwei-Komplement-CPU und nicht irgendeine exotische Nonsense-CPU)

Verwandte Themen