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?
Odpowiedz
Podejmiemy binarne podpisane i niepodpisane formularze, a następnie przedstawimy je w formie szesnastkowej, tak jak każdy inny numer binarny.
Tak, mogą. To jest tak samo jak binarne, jak je interpretujesz (podpisane kontra niepodpisane).
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.
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
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
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.
W Javie są granice typu Integer
danych:
Integer.MIN_VALUE = 0x80000000;
Integer.MAX_VALUE = 0x7fffffff;
kod ref .: http: //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Integer.java#Integer.0MAX_VALUE – roottraveller
Twoje pytanie jest niejasne. Czy odnosisz się do heksadecymalnych liczb całkowitych? ("0xFFFFFFF == -1" będzie tutaj przykładem). –