回答
字節在Java中籤名 - 所以值的範圍是-128到127(含)。
當130簡單地截斷爲8位時,130的位模式是-126作爲一個字節的位模式。
另一個例子:
int x = 255;
byte b = (byte) x; // b is now -1
謝謝喬恩。但是l的位值是多少? 130的二進制等於'10000010',那麼截斷在這裏如何發生? l被截斷後的值是多少?-126 ..? – Pan 2011-04-11 16:08:24
@潘:這正是位模式...在2的補碼(http://en.wikipedia.org/wiki/Two's_complement)爲8位值是-126。你是否理解我的例子,其中'11111111'最終爲-1?這是完全一樣的原則。 – 2011-04-11 16:09:15
你的意思是byte b = (byte)l
?
Java的類型是帶符號的,所以字節允許-128到+127之間的數字。
一個字節是一個8位的序列,它使得2^8個案例= 256.其中一半代表負數,即-128到-1。然後是0,大約一半,1到127代表正數。
130爲INT貌似128 + 2是:
0000:0000 1000:0000 (128)
0000:0000 0000:0010 (2)
0000:0000 1000:0010 (130)
然而,字節剛剛8位數字,並且因爲它們是分配只需位,但剛剛過去的:
1000:0010
第一位表示它是負數。現在你需要添加多少才能達到零?讓我們逐步完成:
1000:0010 x +
0000:0001 1 =
----------------
1000:0011 (x+1)
1000:0011 (x+1) +
0000:0001 1 =
----------------
1000:0100 (x+2)
讓我們做更大的步驟。只需添加我們有零1秒,但首先我們回到X:
1000:0010 x +
0111:1101 y =
--------------
1111:1111
現在有一個轉折點:我們再添1,並得到零(加上溢)
1111:1111 (x + y) +
0000:0001 1
---------
0000:0000 0
如果(x + y)+ 1 = 0,x + y = -1。有趣的是,負1不僅與1(0000:0001)具有'負旗'('1000:0001')相同,但看起來完全不同。然而,第一個位置總是告訴你這個符號:1總是表示否定的。
但是我們之前添加了什麼?
0111:1101 y = ?
它在第一個位置沒有1,所以它是一個正值。我們知道如何解構?
..f:8421 Position of value (1, 2, 4, 8, 16=f, 32, 64 in opposite direction)
0111:1101 y = ?
..f 84 1 = 1+4+8+16+32+64= 125
而現在很明顯:X + 125 = -1 => X = -126
您可以在頂部(正午)想象中的值,轉了一圈主辦,0和正值的排列方式類似於從0到5的時鐘(但是到127),而底部的轉折點(127 + 1 => -128 [sic!]。)現在,您可以順時針旋轉,加1導致 - 127,-126,-125,... -3,-2,-1(在11點鐘),最後再在頂部0。
對於更大的數字(小,int,long)需要更大的時鐘,零始終在最上面,最大和最小總是在最下面。但是,即使一個字節是太大了,使圖片,所以我做了,一個半字節半字節之一:
您可以輕鬆地填寫畫面上的孔,這是小事!
btw .:整件事不叫鑄造。鑄造僅用於對象之間。如果你有什麼東西,這是真正的子類型:
Object o = new String ("casting or not?");
這只是一個賦值,因爲字符串是(總是)一個對象。沒有涉及鑄件。
String s = (String) o;
這是鑄件。更具體的類型。並非每個對象都是一個String。整數提升有一個小關係,因爲每個字節都可以無損地轉換爲長整型,但不是每一個字節都長。但是,即使是Byte和Long,對象類型也不會相互繼承。
你只是沒有得到警告,對
byte s = (byte) 42;
long o = s; // no problem, no warning
byte b = (byte) o; // written like casting
+1,還沒有看到這個描述性答案! – asgs 2011-04-11 18:32:18
這應該是被接受的答案,非常翔實。 感謝您的努力! – 2016-10-31 16:58:57
- 1. 鑄造字節枚舉在Java中
- 2. 在Java中鑄造字符
- 3. 在Java中的類型鑄造/鑄造
- 4. 在Java中鑄造
- 5. 鑄造字符指針長
- 6. 鑄造在Java
- 7. 鑄造逐字節錯誤
- 8. 字節檔/鑄造VB6
- 9. 鑄造長到int
- 10. 在JAVA中鑄造問題
- 11. 瞭解在Java中鑄造
- 12. 鑄造異常在Java中
- 13. Java的鑄造和C++的鑄造
- 14. 枚舉鑄造到一個字節
- 15. 鑄造一個字節十六進制
- 16. 字節鑄造時跳過發生
- 17. 鑄造一個int到長
- 18. 鑄造到很長(GCC)
- 19. 鑄造8位長指針
- 20. java中的類鑄造
- 21. 鑄造布爾在Java
- 22. 字典鑄造
- 23. 鑄造字典
- 24. Java通用鑄造
- 25. Java鑄造對象
- 26. java - 鑄造泛型
- 27. Android Java類鑄造
- 28. Java變量鑄造
- 29. Java鑄造轉換?
- 30. Java鑄造陣列
我不認爲代碼編譯,甚至 – OscarRyz 2011-04-11 16:01:52