2013-03-20 75 views
2

我得到當我試圖做somethink這樣的錯誤:字節算術:如何減去一個字節變量?

byte a = 23; 
a = a - 1; 

編譯器爲這個錯誤: Test.java:8:可能的精度損失發現:整數要求:字節 a = a-1; ^ 1錯誤

鑄造不解決錯誤... 爲什麼編譯器不讓我這樣做? 我是否需要將變量'a'轉換爲int?

+0

這已被問了上百次。見例如http://stackoverflow.com/questions/1660856/promotion-in-java http://stackoverflow.com/questions/927391/why-is-a-cast-required-for-byte-subtraction-in- c/941677 – leonbloy 2013-03-20 20:02:11

回答

5

這樣做。

a = (byte)(a - 1); 

當你從a減去1時,它的整數值。因此,要在字節中分配結果,您需要進行顯式類型轉換。

+0

謝謝!我在'1'中應用了演員,而不是表達的結果,那是我的錯誤。再次感謝。 – mevqz 2013-03-20 20:08:09

3

在Java數學中,在計算之前,一切都被提升爲至少一個int。這被稱爲Binary Numeric Promotion(JLS 5.6.2)。所以這就是編譯器發現int的原因。要解決此,投整個表達式的結果回byte

a = (byte) (a - 1); 
2

a = a - 1; //這裏之前減法被提升爲int數據類型和結果「A-1」變成INT以致無法以字節存儲(字節= 8位和int = 32位)。

這就是爲什麼你必須將它轉換爲一個字節如下:

a = (byte) (a - 1); 
0

這樣做:

a -= 1; 

你甚至不需要明確的轉換器,編譯器/ JVM會做它適合你。

如果您將變量類型更改爲int,那麼只有您提供的信息才能說出來。

變量類型由您打算執行的任務定義。

如果你的變量a指着別人的手指,你爲什麼要用int?類型字節已經足夠了。