java中金額為負數設置方法 java正數變負數變成正數( 二 )


補碼是為了解決 0 的符號兩個編碼的問題 。在補碼運算中 [1000 0000] 就是 -128 。也就得出來了我們的輸出值 -128 。
讓我們看一下 129 的計算方式:
首先知道 129 的二進制是 [1000 0001] , 轉換成 8 bit之后就變成首尾符號位為負數 ,
然后得出補碼 [11111 1111] 也就是 -127 了 。
從這里我們也就可以根據補碼知道了 byte 數據類型的取值范圍:
[1111 1111] ~ [0111 1111] 也就是 -128 ~ 127 。
這里總結一下原碼 , 反碼 , 補碼的大概含義 。
原碼:原碼就是用第一位表示符號 , 其余位表示值 , 就如同上面的 16 位 [0000 0000 1000 0001] 。
反碼: 正數的反碼是原碼本身 , 負數的反碼是在原碼的基礎上 , 其余各個位取反 。
上面的值就變成:[0000 0000 1000 0001]
補碼:正數的補碼就是其本身 , 負數的補碼就是在原碼的基礎上 , 其余的各位都取反 , 并在最后一位1 。也就是在反碼的基礎上1 。
最終的補碼變成:[0000 0000 1000 0001] 也就是129 。
從這里也就可以看出來 , 我們在進行數據處理的時候盡量不要用位數大的數據類型轉換成小的數據類型 , 除非你很清楚這樣轉換沒有問題 。
浮點類型的強制轉換以上說的都是整數的強制轉換問題 , 浮點型的也可以轉換 。這里做兩個演示 。
這里就是要引入浮點和整型進行轉換或者運算的時候出現的問題 。對于金融來說 , 很少使用 float 和 double 進行運算和使用 。推薦使用 BigDecimal 對象 。具體為什么 。了解原理可以參閱 : IEEE 754標準 。后期有時間再寫一篇詳細的原因 。主要還是二進制位的運算區別 。
數據類型的轉換 , 先說到這里吧 。關注我 。后續更多基礎到實戰的內容 。雖慢但永不停更 。

推薦閱讀