Java中double和byte數值之間的轉換

2021-08-29 08:51:49 字數 852 閱讀 7277

首先說一下,在計算機內部,是怎麼表示負數的?

我想計算機科班出身的人應該都知道,正整數在計算機中用原碼來表示的,而負整數在計算機中用補碼來表示的

所以+3 在單位元組的計算機中應該表示為它的原碼:00000011

而-3在單位元組的計算機中應該表示為它的補碼,求補碼的話,先求出-3的相反數+3的原碼:00000011,然後再求反碼,11111100,再在上面加1,11111101,第一位表示符號位,所以這個表示的是乙個負數。

**片斷1.

double d = 567.89d;;

byte b = (byte) d;

system.out.println( "b " + b );

列印出來,結果是55.

怎麼算得呢?我來說一下,首先在強制轉換的時候把小數字截掉,然後再將整數部分和256取模

得到結果為55,

如果該整數在區間[-128,127]之間的話,就直接列印出來

**片斷1.

double d =  500d;;

byte b = (byte) d;

system.out.println( "b " + b );

列印出來,結果是 -12

首先在強制轉換的時候把小數字截掉,然後再將整數部分和256取模

得到的結果是244,不在[-128,127],這個時候,應該將這個值化為8位的二進位制表示式:11110100

由於第一位是1,所以能確定這個數是負數。

根據剛才算負數的補碼的步驟,反推出該數的反碼為11110011,各位相反一下,得出這個數的原碼是00001100

意即為12,根據剛才的判斷是負數,所以再加上符號,就是-12了

所以第二次列印出來的結果是-12

java中float和double的區別?

float 單精度型別,精度是8位有效數字 其餘部分四捨五入 取值範圍是10的 38次方到10的38次方,float占用4個位元組的儲存空間。double 雙精度型別,精度是17位有效數字,取值範圍是10的 308次方到10的308次方,double占用8個位元組的儲存空間。若不宣告的,預設小數都用...

Java中double型別資料的比較

double a 0.001 double b 0.0011 bigdecimal data1 new bigdecimal a bigdecimal data2 new bigdecimal b data1.compareto data2 非整型數,運算由於精度問題,可能會有誤差,建議使用bigd...

JAVA中float與double的區別

float是單精度型別,精度是6位有效數字,取值範圍是10的 38次方到10的38次方,float占用4個位元組的儲存空間 double是雙精度型別,精度是15位有效數字,取值範圍是10的 308次方到10的308次方,double占用8個位元組的儲存空間 當你不宣告的時候,預設小數都用double...