解決Java中的強制類型轉換和二進制表示問題

這篇文章主要介紹瞭解決Java中的強制類型轉換和二進制表示問題,需要的朋友可以參考下

1、Java中用補碼形式表示

2、第一位正負位,1表示負,0表示正。

3、原碼:一個數的二進制表示。

3的原碼00000011   -3的 原碼 100000114、反碼:負數原碼按位取反(符號位不變)。正數原碼本身。

3的反碼00000011   -3的反碼111111005、補碼:正數是原碼本身。負數反碼加1。

3的補碼是00000011  -3的補碼是11111101int佔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。

總結

以上所述是小編給大家介紹的解決Java中的強制類型轉換和二進制表示問題,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回覆大家的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章