**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 在二進位製碼中,為了區分正負數,採...