日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java double 移位_【原创】Java移位运算

發布時間:2024/8/1 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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移位运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。