文章插圖

文章插圖
基礎數據類型的相互轉換
在 Java 中 , 對于基礎的數據類型轉換是學習的重點之一 , 只有知道了轉換規則才能避免轉換過程中遇到的一些坑 。本篇就來說說數據類型之前的轉換規則 。
對于基礎類型的轉換有兩種方式 。一種由小到大的轉換 , 不會丟失精度 。另一種由大變小的強制轉換 , 有可能有丟失精度和出錯 。
對于基礎類型的轉換 , Java 語言一共提供了 7 種數值類型進行相互轉換 。
根據現有規則把數據類型的轉換分為了兩種情況 , 一種是自動轉換 , 另一種是強制轉換 。
轉換規則(從小到大)
從小轉到大的范圍情況下可以自動轉換 , 也可以叫作隱式轉換 。按照數據類型的從小到大自動進行轉換 。
對于自動轉換的規則遵守下面兩個規則:
對于需要轉換的數據類型必須要是轉換前的數據類型兼容轉換后的數據類型 。轉換后的數據類型的范圍必須比轉換前的數據類型范圍大 。
代碼演示:
byte byteVhttp://www.mnbkw.com/jxjc/172450/alue = 'a';// 'a' ASCII is 97short shortValue = byteValue;// 97int intValue = shortValue; // 97long longValue = intValue; // 97float floatValue = longValue; // 97double doubleValue = floatValue; // 97System.out.println(doubleValue);//97char charVhttp://www.mnbkw.com/jxjc/172450/alue = 'a'; int intCharValue = http://www.mnbkw.com/jxjc/172450/charValue; // 97System.out.println(intCharValue);【java正負數轉換 正數怎么變負數】運行查看:以上是一級一級的往上轉換 。所以不會出現問題 , 哪怕是跳級也是可以的 。
比方說:
byte byteVal = 'b';int intVal= byteVal;或者是:int intVal2 = 100;double d = intVal2;這樣也沒有問題 。但是如果是下面這樣就有問題了 。long longVal = 100;//這里會報錯 。Type mismatch: cannot convert from long to intint intVal3 = longVal; 如果非要這樣轉 , 并且轉換前的數據也是能夠和更小類型兼容 , 就需要使用強制轉換 。強制轉換
強制轉換 , 代表著數據類型的轉換默認無法進行轉換 , 所以需要顯式的進行類型轉換 。
強制類型轉換的格式為在變量的名字前面加上括號寫上基礎類型 。
格式:(需要轉換的基礎類型)變量;
long longValWait = 100;int intConvert = (long)longValWait;想要詳細的了解強制類型轉換 , 需要先了解下面的這個圖:讓我看一個會丟失精度的代碼例子:
首先可以看到 short 的字節是 2 , 也就是占用 16 bit , 但是 byte 只占用 1 位 , 也就是 8 bit 。所以在轉換的時候 , short 的前 8 bit 被丟了 。
補碼是為了解決 0 的符號兩個編碼的問題 。在補碼運算中 [1000 0000] 就是 -128 。也就得出來了我們的輸出值 -128 。
讓我們看一下 129 的計算方式:
首先知道 129 的二進制是 [1000 0001] , 轉換成 8 bit之后就變成首尾符號位為負數 ,
然后得出補碼 [11111 1111] 也就是 -127 了 。
[1111 1111] ~ [0111 1111] 也就是 -128 ~ 127 。
這里總結一下原碼 , 反碼 , 補碼的大概含義 。
原碼:原碼就是用第一位表示符號 , 其余位表示值 , 就如同上面的 16 位 [0000 0000 1000 0001] 。
反碼: 正數的反碼是原碼本身 , 負數的反碼是在原碼的基礎上 , 其余各個位取反 。
上面的值就變成:[0000 0000 1000 0001]
補碼:正數的補碼就是其本身 , 負數的補碼就是在原碼的基礎上 , 其余的各位都取反 , 并在最后一位 + 1 。也就是在反碼的基礎上 +1 。
最終的補碼變成:[0000 0000 1000 0001] 也就是129 。
從這里也就可以看出來 , 我們在進行數據處理的時候盡量不要用位數大的數據類型轉換成小的數據類型 , 除非你很清楚這樣轉換沒有問題 。
浮點類型的強制轉換
以上說的都是整數的強制轉換問題 , 浮點型的也可以轉換 。這里做兩個演示 。
數據類型的轉換 , 先說到這里吧 。關注我 。后續更多基礎到實戰的內容 。雖慢但永不停更 。
- 怎么讓負數轉正數 java正負數轉換
- 帶狀皰疹花了8000正常嗎
- 帶狀皰疹已經一周了還會傳染正常嗎
- 日志框架有哪些 java開發日志規范
- 男人動了真情 男人動了真情的跡象
- win7正版如何激活 win7激活教程
- javaweb項目開發案例精粹視頻 javaweb項目開發案例pdf精粹
- 純銀飾品日常保養方法 如何正確處理發黑銀飾
- 怎樣正確清洗保養化妝刷 清洗化妝刷常見的5大誤區
- 青少年膳食營養搭配
