摘要:閱讀原文輕松搞定位運算我們日常開發中為運算使用的并不多,但如果能巧妙的使用位運算可以減少運行開銷和優化算法,通過的源碼可知,如。按位非操作十進制二進制操作數后結果總結對每位進行取反。
閱讀原文:輕松搞定Java位運算
我們日常開發中為運算使用的并不多,但如果能巧妙的使用位運算可以減少運行開銷和優化算法,通過Java的源碼可知,如HashMap。
單位換算bit:位
一個二進制數據0或1,是1bit;
byte:字節
1 byte = 8 bit , 存儲空間的基本計量單位
一個英文字符占一個字節;
1 字母 = 1 byte = 8 bit
一個漢字占2個字節;
1 漢字 = 2 byte = 16 bit
首先明確一點,Java中的位運算是針對整型的數據類型進行運算的,所以操作數必須是一下五種之一。
數據類型 | 所占位數(bit) |
---|---|
byte | 8 |
short | 16 |
int | 32 |
long | 64 |
char | 16 |
計算機中存儲的數據最終是以二進制存儲,如int類型的十進制數字10表示為32bit的二進制:
0000 0000 0000 0000 0000 0000 0000 1010
位運算符運算符 | 意義 |
---|---|
& | 按位與 |
| | 按位或 |
~ | 按位非 |
^ | 按位異或 |
<< | 左移 |
>> | 右移 |
<<< | 無符號右移 |
操作 | 十進制 | 二進制 | |
---|---|---|---|
操作數1 | 3 | 0 0 1 1 | |
操作數2 | 5 | 0 1 0 1 | |
& 后結果 | 1 | 0 0 0 1 |
總結:對應位同為1時,才為1,否則全為0(對應位只要有0,全為0,否則為1)。
另外:你可以把1理解為true,把0理解為false, true和false進行與(&)時,必須同為true時結果才為true.
按位或 |操作 | 十進制 | 二進制 | |
---|---|---|---|
操作數1 | 3 | 0 0 1 1 | |
操作數2 | 5 | 0 1 0 1 | |
| 后結果 | 7 | 0 1 1 1 |
總結:對應位只要有1時,即為1,否則全為0(對應位只有全是0時,結果才是0,否則為1)。
另外:你可以把1理解為true,把0理解為false, true和false進行或(|)時,只要有true,結果即為true。
按位非~操作 | 十進制 | 二進制 | |
---|---|---|---|
操作數1 | 3 | 0 0 1 1 | |
~ 后結果 | 12 | 1 1 0 0 |
總結:對每位進行取反。
按位異或 ^操作 | 十進制 | 二進制 | |
---|---|---|---|
操作數1 | 3 | 0 0 1 1 | |
操作數2 | 5 | 0 1 0 1 | |
^ 后結果 | 7 | 0 1 1 0 |
總結:只要對應為不同即為1
左移<< 和 右移 >>通過下面的圖更加直觀:
左移總結
m< 右移總結 m>>n即相當于m除以2的n次方,得到的為整數時,即為結果。如果結果為小數,此時會出現兩種情況: 如果m為正數,得到的商會無條件 的舍棄小數位; 如果m為負數,舍棄小數部分,然后把整數部分加+1得到位移后的值。 無符號右移>>> 與 右移>> 的區別就是無論操作數是正數還是負數,高位都是補0。 歡迎關注公眾號交流!溢出情況舉例:5<<29,相當于 (2^2 + 1) * 2^29 ,這個結果顯然大于正數的最大值 2^31-1,所以得出的是個負數。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73678.html
摘要:除法運算符總是返回浮點數。取模運算符的結果和被除數的符號正負號相同。使用位運算符時要特別注意優先級。太空船運算符組合比較符當小于等于大于時分別返回一個小于等于大于的值。遞增遞減運算符不影響布爾值。 一、算術運算符 1. 概覽 例子 名稱 結果 $a + $b 加法 $a 和 $b 的和。 $a - $b 減法 $a 和 $b 的差。 $a * $b 乘法 $a 和 ...
摘要:聽了鵬哥的教導,也開始寫起了博客現在多粉,感覺都是機器人哈哈,最近粉絲也不漲了,不知道是不是我最近不發文章的原因。這一個多月,基本就是學刷算法題。在這里不得不吐槽一下學校,每條早上做早操,晚自習到點,感覺浪費了我很多學習技術的時間。 ...
摘要:虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。總體來說就是,我們利用調用開發了屬于我們自己的程序后,通過中的編譯程序將我們的文本文件編譯成字節碼,在上運行這些字節碼,解析這些字節碼,映射到指令集或的系統調用。 1.簡述JDK、JRE、JVM? 一、JDK JDK(Java Development Kit) 是整個JAVA的核心, 包括了Java運行環境(Java Ru...
摘要:虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。總體來說就是,我們利用調用開發了屬于我們自己的程序后,通過中的編譯程序將我們的文本文件編譯成字節碼,在上運行這些字節碼,解析這些字節碼,映射到指令集或的系統調用。 1.簡述JDK、JRE、JVM? 一、JDK JDK(Java Development Kit) 是整個JAVA的核心, 包括了Java運行環境(Java Ru...
閱讀 1661·2021-08-13 15:03
閱讀 2091·2019-08-30 15:54
閱讀 3551·2019-08-26 10:30
閱讀 1027·2019-08-26 10:22
閱讀 2753·2019-08-23 14:42
閱讀 1814·2019-08-22 11:16
閱讀 1046·2019-08-21 18:33
閱讀 3170·2019-08-21 17:28