java double 移位_【原创】Java移位运算
學習移位運算,首先得知道參與移位運算的類型的位數,那先來復習下Java基礎類型的占位數吧。
Java基礎類型
Java基礎類型總結一覽表
類型
二進制位數
最大值
最小值
初始化值
表示形式
帶符號
char
8
127(2^7-1)
-128(-2^7)
0
二進制補碼
是
short
16
32767(2^15 - 1)
-32768(-2^15)
0
二進制補碼
是
int
32
2,147,485,647(2^31 - 1)
-2,147,483,648(-2^31)
0
二進制補碼
long
64
9,223,372,036,854,775,807(2^63 -1)
-9,223,372,036,854,775,808(-2^63)
0L
二進制補碼
是
float
32
3.4028235E38
1.4E-45
0.0f
IEEE 754標準的浮點數
是
double
64
1.7976931348623157E308
4.9E-324
0.0f
IEEE 754標準的浮點數
是
boolean
待定分析
只有true 和false
只有true 和false
false
JVM中用0/1表示
float和double的區別在于一個是單精度的浮點數,一個是雙精度的浮點數。
浮點數是機器內部的指數型的一種表示,可以分解為四個部分:數符號,尾數,指數符號,指數
數符號位和指數符號位都是占一位,表示正負。
對于float,指數部分占8位,其中指數符號一位,指數值部分占7位,尾數部分占24位;對于double,指數部分占16位,指數部分占15位,尾數部分占48位。所以double比float表示的數更大更精準,但與此同時帶來的是兩倍的內存消耗。
boolean占多數位的問題要看情況而論,再JVM中,對布爾值的操作都是替換成int型了,所以是占用32位;如果定義的是布爾型的byte數組,則JVM將其編譯為byte數組類型,這時候占用了8位。其實這里也聽疑惑的,為啥一個boolean可以一會占8位,一會占32位呢?個人理解感覺是在真正表示boolean的時候,應該都是只有1位,非0即1,但是具體編譯的時候其他占用位可能是用來做其他用途。
好了,接下來,來看看移位運算的問題了。
Java的移位運算符包括三種:、>>(帶符號右移)和>>>(無符號右移)。
左移運算符<<
用法:value << number
原則:丟棄最高位,低位補0
注意事項:char,byte和short型在移位時,會先轉換為int型,然后再進行移位操作;
當移動位數超過移動數value的位數時,會做一個取模操作,例如45<<34,則具體移動時是移動2位,因為34%32=2。
實例:
1. 例子程序
public classTest {public static voidmain(String args[]) {int num =0x40000000;
System.out.println(num);
num= num << 1;
System.out.println(num);
}
}
2. 程序結果
1073741824
-2147483648
選取了一個典型用例,該例子說明,符號位也會連同一起移動,數字位如果為1且移動到了符號位,會將數變為負數。
帶符號右移 ? ?>>
用法:value >> number
原則:符號位不變,左邊依次補上符號位,且與此同時最低位要舍棄
注意事項:char,byte和short型在移位時,會先轉換為int型,然后再進行移位操作;
當移動位數超過移動數value的位數時,會做一個取模操作,例如45<<34,則具體移動時是移動2位,因為34%32=2。
實例:
1. 例子程序
public classTest {public static voidmain(String args[]) {int num1 =0x80000000;int num2 = 0x00000003;
System.out.println(num1);
System.out.println(num2);
num1= num1 >> 2;
num2= num2 >> 1;
System.out.println(num1);
System.out.println(num2);
}
}
2. 運行結果
-2147483648
3
-536870912
1
num1說明了符號會跟著往右邊跑,帶符號移動。
num2說明了低位在舍棄,由3變為1了。
無符號右移 ? ?>>>
用法:value >>> number
原則:符號位不變,左邊依次補上0,且與此同時最低位要舍棄
注意事項:char,byte和short型在移位時,會先轉換為int型,然后再進行移位操作;
當移動位數超過移動數value的位數時,會做一個取模操作,例如45<<34,則具體移動時是移動2位,因為34%32=2。
實例:
1. 例子程序
public classTest {public static voidmain(String args[]) {int num1 =0x80000000;int num2 = 0x00000003;
System.out.println(num1);
System.out.println(num2);
num1= num1 >>> 1;
num2= num2 >>> 33;
System.out.println(num1);
System.out.println(num2);
}
}
2. 運行結果
-2147483648
3
1073741824
1
從num1可以看出符號位也當做數字位跟著一起移動了
總結
以上是生活随笔為你收集整理的java double 移位_【原创】Java移位运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python-ZFJObsLib完美生成
- 下一篇: java正则表达式 and_Java正则