負數的進製表示(java筆記9)

2021-08-15 04:41:07 字數 1704 閱讀 3634

**1.「多重轉型」問題

system.out.println((int)(char)(byte)-1);

system.out.println((int)(char)(byte)1);

輸出

65535

1解析「多重轉型」問題

連續三次型別轉換的表示式如下:(int)(char)(byte)-1

1. int(32位) -> byte(8位)

-1是int型的字面量,根據「2的補碼」編碼規則,編碼結果為0xffffffff,即32位全部置1.轉換成byte型別時,直接擷取最後8位,所以byte結果為0xff,對應的十進位制值是-1.

2. byte(8位) -> char(16位)

由於byte是有符號型別,所以在轉換成char型(16位)時需要進行符號擴充套件,即在0xff左邊連續補上8個1(1是0xff的符號位),結果是0xffff。由於char是無符號型別,所以0xffff表示的十進位制數是65535。

3. char(16位) -> int(32位)

由於char是無符號型別,轉換成int型時進行零擴充套件,即在0xffff左邊連續補上16個0,結果是0x0000ffff,對應的十進位制數是65535。

取絕對值的二進位制,取反加1

5  ----  

0000 0101

原碼

取反1111 1010

反碼

加1 1111 1011

補碼

所以

1111 1011

就表示 -5 

**3.   1111 1011  對應十進位制中的多少        【減一取反】

首位是 1 ,故是負數

減一           1111 1010

取反           0000 0101      ---->  5

加負號

所以答案是    -5

4、

負數表示

負數對應的正數

的二進位制-1,然後取反。

-6 0000-0000

0000-0000

0000-0000

0000-0110

1111-1111

1111-1111

1111-1111

1111-1001

取反1111-1111

1111-1111

1111-1111

1111-1010加1

5.   負數的儲存原理

6.  -128的由來

負數二進位制表示

負數在計算機中用補碼表示。這是教科書上到表示,由於時間久遠,又由於上課沒好好學,以至於補碼是啥,在心中沒留下任何到痕跡,補習一下。原碼 整數在記憶體中用原碼表示,即按絕對值大小轉換成二進位制 如 b 00000101 b 是 b 5 b 到二進位制表示 反碼 將二進位制數按位取反,所得的新二進位制數...

負數的二進位制表示

原碼 反碼 補碼 反碼 1 負數的二進位制表示法 比如,假設有一 int 型別的數,值為5,那麼,我們知道它在計算機中表示為 00000000 00000000 00000000 00000101 5轉換成二制是101,不過int型別的數占用4位元組 32位 所以前面填了一堆0。現在想知道,5在計算...

負數的二進位制表示

原碼 正數原碼就是其二進位制。負數的原碼就是其二進位制,並將最高位作為符號位設為1。eg 1 原碼為 1000 0001複數進行運算時用補碼表示負數補碼 負數原碼不考慮最高符號位的原碼的反碼 1 eg 1 的補碼為 1111 1110 反碼 1 1111 1111 在二進位製碼中,為了區分正負數,採...