2008-11-25 100 views

回答

25

最高位爲符號位。設置它表示負數:-16777216。

與大多數語言一樣,Java以2's complement形式存儲帶符號的數字。在這種情況下,從0x7F000000或2130706432中減去2 或2147483648產生-16777216。

0

ints用Java簽名。

39

只是一個除了埃裏克森的回答:

正如他所說的,符號的整數存儲爲二進制補碼,可以在大多數計算機體系結構各自的正值。

即,整個2^32個可能的值被分成兩組:一個用於以0開始位正值和一個負值開始用1

現在,假設我們'限於3位數字。讓我們安排他們在一個有趣的方式將是有意義的第二:

 000 
    111 001 
110  010 
    101 011 
    100 

您將看到在左側的所有數字與1位開始,而在右邊,他們開始根據我們先前決定宣佈前者爲負值而後者爲正值,我們看到001,010和011是唯一可能的正數,而111,110和101是它們各自的負值。

現在我們如何分別處理頂部和底部的兩個數字? 000顯然應該是零,而100將是所有沒有正面對應物的最低負數。總結:

 000  (0) 
    111 001 (-1/1) 
110  010 (-2/2) 
    101 011 (-3/3) 
    100  (-4) 

您可能注意到,您可以通過否定1(001),並加入1(001)得到它的-1(111)的位模式: 001(= 1) - > 110 + 001 - > 111(= -1)

現在回到你的問題:

0xff000000 = 1111 1111 0000 0000 0000 0000 0000 0000

我們不必在前面加零的進一步因爲我們已經達到了32位的最大值。 此外,它顯然是一個負數(因爲它開始與1位),所以我們現在要計算其絕對值/正副本:

這意味着,我們將採取的

補碼
1111 1111 0000 0000 0000 0000 0000 0000 

這是

0000 0000 1111 1111 1111 1111 1111 1111 

然後,我們添加

0000 0000 0000 0000 0000 0000 0000 0001 

並獲得

0000 0001 0000 0000 0000 0000 0000 0000 = 16777216 

因此,0xff000000 = -16777216。

+0

@Kitsune(和/或任何人不知道這一點):這是一個很好的解釋。閱讀它可能需要幾次,但我建議您閱讀它,直到它真的有意義。 – 2008-11-25 23:47:15

7

一些可能值得指出的東西 - 這個代碼並不意味着被用作一個帶有數值的整數;目的是作爲一個位掩碼來過濾掉32位顏色值中的alpha通道。這個變量甚至不應該被認爲是一個數字,就像打開高8位的二進制掩碼一樣。

相關問題