2014-09-04 28 views
5

hi Ich möchte wissen, wie es möglich ist, einen hexadezimalen negativen Wert zu konvertieren, um dezimal zu konvertieren, einfach ohne hexadezimal in binäre umwandeln und dann multipliziert jedes Bit mit einer Potenz von 2 und summiert den ganzen Wert, um das Ergebnis zu erhalten, es dauert zu viel Zeit: Beispiel der Nummer (32 Bits): 0xFFFFFE58Wie konvertiert man negative hexadezimale in dezimal

also wie kann ich es tun?

+1

Computer eine beliebige Anzahl in der Regel als binär. – someuser

+1

Ich bin mir nicht sicher, welche Darstellung Ihre Dezimalstelle annehmen soll. Versucht 'sprintf (Puffer,"% d ", 0xFFFFFE58);'? –

+0

Wie können Sie was tun? eine hexadezimale Zahl lesen und drucken als Dezimalzahl? Bitte klären Sie Ihre Frage –

Antwort

3

ohne einen Computer zu verwenden, können Sie es wie folgt berechnen:

0xFFFF FE58 = - 0x1A8 = -(1 * 16² + 10 * 16 + 8) = -(256 + 160 + 8) = -424 

0xFFFF FE58 eine negative Zahl in 2er-Komplement. Um den absoluten Wert zu erhalten, müssen Sie alle Bits invertieren und 1 binär hinzufügen. Sie können auch außerhalb des Bereichs (0x1 0000 0000)

0x100000000 
-0x0FFFFFE58 
     = 
0x0000001A8 

jetzt wissen wir, dass Ihre Nummer -0x1A8 diese Nummer von der ersten Nummer subtrahieren. Jetzt müssen Sie die Ziffern multipliziert mit ihrem Platzwert addieren. 8 * 16^0 + A (das ist 10) * 16^1 + 1 * 16^2 = 424. So ist der Dezimalwert Ihrer Zahl -424.

+0

Wie hast du es gemacht ?? – karim

+0

Ich habe ein bisschen hinzugefügt. Ich hoffe, das macht es klarer. Bitte fragen Sie, was unklar ist. – mch

0

eine Berechnung für die positive Zahl durchführen, dann mit Zweierkomplement in das Negativ konvertieren.

Erklärung siehe hier für positive Umwandlung von hexa dezimal:

http://www.permadi.com/tutorial/numHexToDec/

im Grunde:

  1. die am weitesten rechts stehende Ziffer der Hexadezimalzahl erhalten, rufen Sie diese Ziffer die currentDigit.
  2. Machen Sie eine Variable, nennen wir es Kraft. Setzen Sie den Wert auf 0.
  3. Multiplizieren Sie die aktuelle Ziffer mit (16^power), speichern Sie das Ergebnis.
  4. Inkrementieren um 1.
  5. Setzen Sie die currentDigit auf die vorherige Ziffer der Hexadezimalzahl.
  6. Wiederholen Sie den Vorgang ab Schritt 3, bis alle Ziffern multipliziert wurden.
  7. Summiere das Ergebnis von Schritt 3, um die Antwortnummer zu erhalten.
Verwandte Themen