位運算java_Java中的位運算

Java中的位運算,說實話,工作了兩年的時間里,從來沒有用過一次,因為平時都是些的是業務代碼,很少接觸比較底層的東西,我記得第一次在代碼中看到還是在HashMap的Hash算法中看到的,這次重拾Java基礎,著重理解了一下Java中的位運算,計算機中的運算一般都是操作反碼進行運算,操作完成之后,再將結果的反碼轉化成原碼,然后將二進制的結果轉化成十進制輸出出來,其實乘法和除法運算在計算機中都是通過位運算進行的,所以我覺得這部分應該好好整理一下,以下內容都是傳智播客的Java基礎中的講解視頻還有一些是講解的課件、筆記中的內容,在此聲明。

運算符

運算

位運算符的細節

<<

左移

空位補0,被移除的高位丟失

>>

右移

被移位的二進制最高位是0,右移后,空缺位補0,最高位是1,最高位補1

>>>

無符號右移

被移位二進制無論是0或者1,空缺位都是用0補

&

與運算

任何二進制位和0進行&運算,結果都是0,和1進行&運算,都是原值

|

或運算

任何二進制位和0進行|運算,結果都是原值,和1進行|運算,都是1

^

異或運算

任何相同二進制位進行^運算,結果都是0,不同二進制位進行^運算,結果都是1

~

反碼

注意:

<

>>:右移稍微復雜一點,如果最高位是0,左邊被移空的位就填入0,如果高位是1,左邊被移空的位就填入1,相當于除以2的倍數

>>>:無論最高位是1還是0,左邊被移空的高位都填入0

Java中運算符的優先級:(圖片來源網路)

78929861fe2c3dc9541ff45d619d660f.png

代碼演示各種位運算:

1 /*

2 要做位運算,首先要把數據轉換為二進制。3 */

4 public static voidmain(String[] args) {5 //&,|,^,~

6 int a = 3;7 int b = 4;8

9 System.out.println(3 & 4);10 System.out.println(3 | 4);11 System.out.println(3 ^ 4);12 System.out.println(~3);13

14 }

代碼分析解讀:

分析:因為是位運算,所以我們必須先把數據換算成二進制。

3的二進制:11

00000000 00000000 00000000 00000011

4的二進制:100

00000000 00000000 00000000 00000100

&位與運算:有0則0。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000000

結果是:0

|位或運算:有1則1。

00000000 00000000 00000000 00000011

|00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

結果是:7

^位異或運算:相同則0,不同則1。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

結果是:7

~按位取反運算符:0變1,1變0

00000000 00000000 00000000 00000011

~11111111 11111111 11111111 11111100 (補碼)

補碼:11111111 11111111 11111111 11111100

反碼:11111111 11111111 11111111 11111011

原碼:10000000 00000000 00000000 00000100

結果是:-4

^異或運算的特點:

1 /*

2 ^的特點:一個數據對另一個數據位異或兩次,該數本身不變。3 */

4 public static voidmain(String[] args) {5 int a = 10;6 int b = 20;7

8 System.out.println(a ^ b ^ b); //10

9 System.out.println(a ^ b ^ a); //20

10 }

1 /*

2 <<:>>:右移 最高位是0,左邊補齊0;最高為是1,左邊補齊14 >>>:無符號右移 無論最高位是0還是1,左邊補齊05

6 面試題:7 請用最有效率的方式寫出計算2乘以8的結果?8 2 * 89 2 << 310 */

11 public static voidmain(String[] args) {12 //<< 把<

13 System.out.println(3 << 2); //3*2^2 = 3*4 = 12;14

15 //>> 把>>左邊的數據除以2的移動次冪

16 System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6

17 System.out.println(24 >>> 2);18

19 System.out.println(-24 >> 2);20 System.out.println(-24 >>> 2);21 }

代碼分析解讀(32位):

計算出3的二進制:11

00000000 00000000 00000000 00000011

(00)000000 00000000 00000000 0000001100

>>(右移)的移動:

計算出-24的二進制:11000

原碼:10000000 00000000 00000000 00011000

反碼:11111111 11111111 11111111 11100111

補碼:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

1111111111 11111111 11111111 111010(00) 補碼

補碼:1111111111 11111111 11111111 111010

反碼:1111111111 11111111 11111111 111001

原碼:1000000000 00000000 00000000 000110

結果:-6

>>>(無符號右移)的移動:

計算出-24的二進制:11000

原碼:10000000 00000000 00000000 00011000

反碼:11111111 11111111 11111111 11100111

補碼:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

0011111111 11111111 11111111 111010(00)

結果:1073741818

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529693.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java藍橋杯dfs_第七屆 藍橋杯決賽 Java B組 打靶 解題報告(DFS,回溯,全排列)-Go語言中文社區...

題目&#xff1a;打靶小明參加X星球的打靶比賽。比賽使用電子感應計分系統。其中有一局&#xff0c;小明得了96分。這局小明共打了6發子彈&#xff0c;沒有脫靶。但望遠鏡看過去&#xff0c;只有3個彈孔。顯然&#xff0c;有些子彈準確地穿過了前邊的彈孔。不同環數得分是這樣設…

guid mysql_關于MySQL:MySQL-如何搜索GUID

我正在使用第三方.NET庫(Rhino Security)&#xff0c;將其標識符存儲為mysql數據庫中binary(16)字段中的向導。 一切都可以從該應用程序完美地工作&#xff0c;但是當我嘗試通過查詢編輯器(對于MySQL為TOAD)手動運行查詢時&#xff0c;沒有行返回我知道存在的標識符。 例如&…

java 單例 生命周期_Rhythmk 一步一步學 JAVA (13) Spring-2 之Ben懶加載以及生命周期,單例...

1、定義Demo類&#xff1a;package com.rhythmk.spring;public class User {public void Init (){System.out.println("User 對象被 創建&#xff01;");}// 計數器public int Count0;public void Say(){this.Count;System.out.println("User 被"this.Coun…

java 高級泛型_java泛型的高級應用

展開全部在上面的例子中&#xff0c;由于沒有限制class GenericsFoo類型持有者T的范圍&#xff0c;實際上這里32313133353236313431303231363533e59b9ee7ad9431333339666666的限定類型相當于Object&#xff0c;這和“Object泛型”實質是一樣的。限制比如我們要限制T為集合接口類…

java窗體線條切換消失_java – 如何更改apache poi生成的圖表不使用平滑線條并將空單元格顯示為間隙?...

我使用的是POI 3.12-beta1,并且代碼可以在圖例中創建包含多個數據集和命名系列的折線圖.但是,poi中折線圖的默認設置會生成一條已在數據點上平滑的線.空值也被繪制為0,但我們希望這些線在第一列停止,其中有一個空單元格.一旦在xlsx文件中呈現并更改這些設置,我就可以進入圖表屬…

java正則表達式 問號_正則表達式問號的四種用法詳解

正則表達式問號的四種用法詳解原文符號因為?在正則表達式中有特殊的含義&#xff0c;所以如果想匹配?本身&#xff0c;則需要轉義&#xff0c;\?有無量詞問號可以表示重復前面內容的0次或一次&#xff0c;也就是要么不出現&#xff0c;要么出現一次。非貪婪匹配貪婪匹配在滿…

java alert跳頁面_JavaScript中通過提示框跳轉頁面的方法

通過提示框跳轉頁面具體代碼如下所示&#xff1a;Documentwindow.onload function(){ //設置當頁面加載時執行var btn document.getElementsByTagName("button")[] //獲取btn元素btn.onclick function(){ //給button加上一個點擊事件var answer confirm("是否…

java jsp if else if_jsp頁面使用if else語句 | 學步園

jsp頁面嵌入java語句使用即可,但是在使用if else語句時一定要注意使用是標點的使用,在語句中分號不能寫,不符合jsp頁面的語法規則,若多寫了則會報錯:如下:{name: priceRA, type: string}, {name: priceRB, type: string}, {name: priceRC, type: string},{name: priceRD, typ…

mysql 優化300例_mysql的limit優化實例

測試環境操作系統: debian linux服務器版本: Mysql 5.0.24Mysql數據庫的Qcache緩存關閉數據庫表testtable的參數:類型: MyISAM 大小: >80MB 記錄規模: >50000 字段數: >25個字段id是主鍵 leibie字段上建有索引進行數據分段測試1>SQL不帶where條件的測試1…

mysql+百萬+中間表_MYSQL優化

MYSQL優化是一個非常大的課題&#xff0c;這篇文章主要介紹了跟MYSQL相關的4個方面&#xff0c;如果想深入研究可以查下相關資料。一、服務器級別優化二、操作系統級別優化三、MYSQL級別優化四、SQL級別優化一、服務器級別優化1.服務器選型SUN小型機、DELL730xd、HPDL380、IBM3…

java kafka 拉取_java獲取kafka consumer lag

maven依賴org.apache.kafkakafka-clients0.10.1.0注意&#xff1a;kafka-clients版本需要0.10.1.0以上&#xff0c;因為調用了新增接口endOffsets;laglogsize-offsetlogsize通過consumer的endOffsets接口獲得&#xff1b;offset通過consumer的committed接口獲得&#xff1b;imp…

java開源圖像處理ku_83 項開源視覺 SLAM 方案夠你用了嗎?

原標題&#xff1a;83 項開源視覺 SLAM 方案夠你用了嗎&#xff1f;公眾號&#xff1a;3D視覺工坊主要關注&#xff1a;3D視覺算法、SLAM、vSLAM、計算機視覺、深度學習、自動駕駛、圖像處理以及技術干貨分享運營者和嘉賓介紹&#xff1a;運營者來自國內一線大廠的算法工程師&a…

java 方法的拆分_java – 字符串拆分和比較 – 最快的方法

>將輸入讀入byte []數組以將指針保持在代碼的一側.>逐字節讀取,計算整數元素&#xff1a;int b inputBytes[p];int d b - 0;if (0 < d) {if (d < 9) {element element * 10 d;} else {// b :}} else {// b ,// add element to the hash; element 0;...}if (…

java sql異常_java.sql.SQLException: Io 異常: Got minus one from a

java.sql.SQLException: Io 異常: Got minus one from a read callat oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)at oracle.jdbc.driver.DatabaseError.thro…

java 攔截器ajax_(轉)攔截器深入實踐 - JAVA XML JAVASCRIPT AJAX CSS - BlogJava

Interceptor的定義我們來看一下Interceptor的接口的定義&#xff1a;Java代碼 publicinterfaceInterceptorextendsSerializable {/*** Called to let an interceptor clean up any resources it has allocated.*/voiddestroy();/*** Called after an interceptor is created, b…

php學的是什么意思_為什么要學習PHP?到底什么是PHP?

為什么要學習PHP?到底什么是PHP?PHP可以做什么?相信這樣的問題困擾著很多的人&#xff0c;在我沒工作之前&#xff0c;都沒有聽說過PHP&#xff0c;自從工作后&#xff0c;慢慢接觸到代碼&#xff0c;慢慢知道什么是PHP。PHP是做網站一種語言&#xff0c;很多工程師都使用PH…

php 多數據庫聯合查詢,php如何同時連接多個數據庫_PHP教程

下面是一個函數能夠保證連接多個數據庫的下不同的表的函數&#xff0c;可以收藏一下&#xff0c;比較實用&#xff0c;測試過是有用的。function mysql_oper($oper,$db,$table,$where1,$limit10){$connmysql_connect(localhost,like,admin,true) or mysql_error();mysql_select…

java判斷有沒有修改,java字節碼判斷對象應用是否被修改

原創1 背景在學習并發的時候看到了ConcurrentLinkedQueue隊列的源碼&#xff0c;剛開始的時候是看網上的帖子&#xff0c;然后就到IDE里邊看源碼&#xff0c;發現offer()方法在1.7版的時候有過修改。樓主的問題不是整個方法&#xff0c;而是其中的一截代碼“(t ! (t tail))”&…

php接口 含義,php晉級必備:一文讀懂php接口特點和使用!

PHP接口與類是什么關系&#xff1f;前面提到了php中抽象類和抽象方法&#xff0c;今天給大家談談php中接口技術。在PHP中每個類只能繼承一個父類&#xff0c;如果聲明的新類繼承了抽象類實現了以后&#xff0c;這個新類就不能有其它的父類了。但是在實際中需要繼承多個類實現功…

php獲取不重復的隨機數字,php如何生成不重復的隨機數字

【摘要】PHP即“超文本預處理器”&#xff0c;是一種通用開源腳本語言。PHP是在服務器端執行的腳本語言&#xff0c;與C語言類似&#xff0c;是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。下面是php如何生成不重復的隨機數字&#xff0c;讓我們…