2011-04-29 11 views
8

Czy liczby szesnastkowe są zawsze ujemne? Jeśli tak, to w jaki sposób?
Dla systemu binarnego masz podpisany i niepodpisany.
Jak można je reprezentować w Hex? Potrzebuję tego dla rutynowej procedury, którą za chwilę rozpocznę.Czy liczby szesnastkowe są kiedykolwiek ujemne?

+1

Twoje pytanie jest niejasne. Czy odnosisz się do heksadecymalnych liczb całkowitych? ("0xFFFFFFF == -1" będzie tutaj przykładem). –

Odpowiedz

5

Podejmiemy binarne podpisane i niepodpisane formularze, a następnie przedstawimy je w formie szesnastkowej, tak jak każdy inny numer binarny.

6

Tak, mogą. To jest tak samo jak binarne, jak je interpretujesz (podpisane kontra niepodpisane).

21

Tak. Na przykład, że masz następujące reprezentacje w podpisanym 32-bitowym binarnym i hex:

Decimal: 1 
Binary: 00000000 00000000 00000000 00000001 
    Hex: 00 00 00 01 

Decimal: -1 
Binary: 11111111 11111111 11111111 11111111 
    Hex: FF FF FF FF 

Decimal: -2 
Binary: 11111111 11111111 11111111 11111110 
    Hex: FF FF FF FE 

Jak widać, reprezentacja Hex liczb ujemnych jest bezpośrednio związane z reprezentacji binarnej.

+2

Jest to następstwo uzupełnienia do liczb ujemnych, tak jak byłyby one w systemie binarnym. Wiem, że jest to najszersza reprezentacja podpisanych liczb binarnych, jednak jest specyficzna dla plików binarnych, prawda? Ta odpowiedź ma podstawę 10, wykonuje komplement 2 i wyprowadza podstawową 16 konwersję literalnego wyjścia binarnego. Wiem, że "podpisana" podstawa 10 jest reprezentowana przez znak ujemny, czy nie jest taka sama dla podstawy 16? Czy -0xF nie konwertuje na -15? Wiem, że podpisany plik binarny wymaga kontekstu, prawda? ponieważ 1111 == -1 lub 1111 == 15. Znak dodaje kontekst. Nigdy nie widziałem podpisanego sześcianu i jestem ciekawy. Dzięki! – Kit10

13

Wysoki bit liczby określa, czy jest ujemny. Na przykład int ma długość 32 bitów, więc jeśli bit 31 jest równy 1, jest ujemny. Teraz sposób wyświetlania tej wartości, czy to szesnastkowy czy dziesiętny, nie ma znaczenia. więc wartości hex jak

0x80000000 
0x91345232 
0xA3432032 
0xBFF32042 
0xC33252DD 
0xE772341F 
0xFFFFFFFF 

są negatywne, ponieważ górna bit jest ustawiony na 1

 | 
     v 
0x8 -> 1000 
0x9 -> 1001 
0xA -> 1010 
0xB -> 1011 
0xC -> 1100 
0xD -> 1101 
0xE -> 1110 
0xF -> 1111 
3

Z jednej strony, dlaczego nie - to tylko pozycyjnego systemu liczbowego, jak przecinku.

Z drugiej strony, zwykle używają one notacji szesnastkowej do wyprowadzenia podstawowego wzoru bitowego - i jest to o wiele prostsze, jeśli liczba jest interpretowana jako niepodpisana.

Tak więc odpowiedź brzmi - jest możliwa, matematycznie poprawna i wewnętrznie spójna, ale pokonuje najczęstszy cel notacji szesnastkowej.

1

W Javie są granice typu Integer danych:

Integer.MIN_VALUE = 0x80000000; 
Integer.MAX_VALUE = 0x7fffffff; 
+0

kod ref .: http: //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Integer.java#Integer.0MAX_VALUE – roottraveller

Powiązane problemy