經過強制類型轉換以后,變量a, b的值分別為( )short a = 128; byte b = (byte) a;


 

 

1、Java中用補碼形式表示
2、第一位正負位,1表示負,0表示正。
3、原碼:一個數的二進制表示。
                 3的原碼00000011   -3的  原碼  10000011
4、反碼:負數原碼按位取反(符號位不變)。正數原碼本身。
                3的反碼00000011   -3的反碼11111100
5、補碼:正數是原碼本身。負數反碼加1。
                 3的補碼是00000011  -3的補碼是11111101
-------------------------------------------------------------------------------
int占4個字節,32位
byte占1個字節,8位
所以強轉時會截斷。前24位
---------------------------------------------------------------------------
在內存中表示形式( 注意java中是以補碼表示一個數,所以表示形式是補碼,不是原碼! ):
int a = 3          00000000   00000000   00000000 00000011 (強轉byte時前面24個0被截斷)
byte b = 3       00000011
int a = -3       11111111   11111111     11111111     11111101  (強轉byte時前面24個1被截斷)
byte b = -3      11111101
----------------------------------------------------------------------------
已知負數的補碼,求負數:
補碼-1=反碼,反碼按位取反=該負數絕對值 
已知負數,求負數的補碼:
1、負數原碼除了符號位,按位取反(不含符號位),加1。
2、負數絕對值的補碼(也就是原碼),按位取反(含符號位),加1
-------------------------------------------------------------------------------
例子:
java int 128轉為byte,值: 
128為正數,補碼為10000000(前面24個0省略),變成byte,只剩下10000000(byte為1個字節),因為開頭是1,所以為負數。即1個負數的補碼是10000000。反碼是01111111,原碼是1000000。是128.因為是負數,所以是-128。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM