2011-04-29 282 views
8

十六進制數字是負數嗎?如果是,那麼如何?
對於二進制,你將有簽署無符號
如何用Hex表示它們?我需要這個來完成我即將開始的十六進制程序。十六進制數字是負數嗎?

+1

你的問題還不清楚。你指的是十六進制整數文字? (這裏''0xFFFFFFF == -1'就是一個例子)。 – 2011-04-29 01:13:20

回答

5

你會採取二進制有符號和無符號的形式,然後用十六進制表示它們,就像任何二進制數字一樣。

6

是的,他們可以。它與二進制的解釋方式相同(有符號與無符號)。

21

是的。例如你必須在簽訂的32位二進制和十六進制以下陳述:

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 

正如你所看到的,負數的十六進制表示,直接關係到二進制表示。

+2

這是遵循二進制補碼錶示的負數,因爲它們是二進制的。我知道這是有符號二進制數的最廣泛表示,但是,它是二進制的,對嗎?這個答案以10爲底,執行2的恭維,並輸出文字二進制輸出的基本16位轉換。我知道一個「有符號」的基數10是用負號表示的,對於基數16來說,這是不一樣的? -0xF不能轉換爲-15嗎?我知道簽名的二進制文件需要上下文,對吧?因爲1111 == -1或1111 == 15.該符號添加上下文。我從來沒有見過簽名的十六進制,並且很好奇。謝謝! – Kit10 2014-08-15 11:40:25

13

數字的高位確定它是否爲負數。因此,例如一個int是32位長,所以如果位31是1,它是負值。現在如何顯示該值,無論是十六進制還是十進制都無關緊要。所以像

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

的十六進制值都是負的,因爲最高位設置爲1

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

一方面,爲什麼不 - 它只是一個位置的數字系統,如小數。

另一方面,它們通常使用十六進制表示法來推斷潛在的位模式 - 如果數字被解釋爲無符號,則更直接。

所以答案是 - 這是可能的,數學上正確的和內部一致的,但打敗了十六進制符號的最常見的目的。

1

在Java中,這些都是Integer數據類型的範圍:

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

ref code:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Integer.java#Integer.0MAX_VALUE – roottraveller 2017-08-03 06:38:39