2014-09-04 35 views
5

cześć Chcę wiedzieć, w jaki sposób można przekształcić szesnastkową wartość ujemną (w celu uzupełnienia kodowania) na dziesiętną, łatwo bez konwersji wartości szesnastkowej na dwójkową, a następnie pomnożenie każdego z nich przez potęgę 2 i sumuje całą wartość, aby uzyskać wynik, zajmuje to zbyt dużo czasu: przykład liczby (32 bity): 0xFFFFFE58jak przekonwertować ujemną liczbę szesnastkową na dziesiętną

, więc jak mogę to zrobić?

+1

Komputer dowolna liczba zwykle uważana za binarną. – someuser

+1

Nie jestem pewien, jaką reprezentację powinien przyjąć twój dziesiętny. Próbowałem 'sprintf (bufor,"% d ", 0xFFFFFE58);'? –

+0

Jak możesz zrobić co? odczytać liczbę heksadecymalną i drukować jako dziesiętny? Proszę wyjaśnić swoje pytanie: –

Odpowiedz

3

bez użycia komputera można obliczyć to tak:

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

0xFFFF FE58 jest liczbą ujemną w 2 uzupełnień. Aby uzyskać bezwzględną wartość, musisz odwrócić wszystkie bity i dodać 1 w systemie binarnym. Można również odjąć tę liczbę od pierwszego numeru poza zakresem (0x1 0000 0000)

0x100000000 
-0x0FFFFFE58 
     = 
0x0000001A8 

teraz wiemy, że numer jest -0x1A8. teraz musisz dodać cyfry pomnożone przez ich wartość miejsca. 8 * 16^0 + A (co 10) * 16^1 + 1 * 16^2 = 424. Więc dziesiętna wartość twojej liczby to -424.

+0

Jak to zrobiłeś? – karim

+0

Dodałem trochę. Mam nadzieję, że to się wyjaśni. Zapytaj, co jest niejasne. – mch

0

wykonaj obliczenia na podstawie liczby dodatniej, a następnie przelicz na wartości ujemne za pomocą uzupełnienia Two's.

zobaczyć wyjaśnienia tutaj pozytywnej przemiany z hexa do przecinku:

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

zasadzie:

  1. uzyskać właściwą cyfrę liczby hex, zadzwoń tej cyfrze się currentDigit.
  2. Utwórz zmienną, nazwijmy ją mocą. Ustaw wartość na 0.
  3. Pomnóż aktualną cyfrę za pomocą (16^mocy), zapisz wynik.
  4. Zwiększenie mocy o 1.
  5. Ustawia aktualnąDigit na poprzednią cyfrę liczby heksadecymalnej.
  6. Powtórz czynności z punktu 3, aż wszystkie cyfry zostaną pomnożone.
  7. Suma wyniku z kroku 3, aby uzyskać numer odpowiedzi.