重寫文字框JTextField新增圖示
整數的表示
以下以單位元組表示數為例
無符號數
對於無符號整數,一個位元組最多可以表示256個整數:[0~255]
有符號整數
對於有符號的整數,則需要佔用1位最高位作為符號位,此後7位可表示128位整數:[0~127]
對於有符號整數的表示共有三種表示方法:
原碼(符號絕對值法)
原碼將最高位作為符號位(0表示正,1表示負):[-127~127]
注意到,此時存在+0和-0兩個0
反碼
反碼同樣將最高位作為符號位(0表示正,1表示負),但互為相反數的兩個數,各位的值相反:
例:+6表示為:0000 0110
-6表示為:1111 1001(而原碼是:1000 0110)
總結:整數的反碼是原碼本身,而負數的反碼是原碼的符號位不變,其它位取反。
注意到,由於存在互為相反數的關係,因此同樣存在+0(0000 0000)和
-0(1111 1111)兩個0
補碼
補碼仍然採用最高位作為符號位(0表示正,1表示負),正數的補碼還是它本身,負數的補碼分兩步:1. 先求出該負數的反碼 2. 在反碼的基礎上+1
此時,+0(0000 0000)和-0(0000 0000)表示相同,而原來表示 -0 的
1000 0000(原碼錶示)或 1111 1111(反碼錶示,此時已有對應的補碼值:-1)。
那麼,1000 0000是哪個負數的補碼呢?我們逆推一下:
求反碼為:1000 0000 - 1 = 0111 1111
求原碼為:0000 0000
顯然,他不是一個負數(因為一個負數的符號位為1),根據對稱性我們也可以知道,8位可以表示位256(偶數)個數,但補碼錶示法的 +0 和 -0 只有一種表示法,因此,勢必會多出來一個數(沒錯,就是1000 0000),我們當然可以用他表示為-0(讓0000 0000表示+0),或者128或用作其他用途、
總結:正數的補碼是它的本身,負數的補碼是它的反碼加1(即:原碼的符號位不變,其它位取反後加1)。