位元運算子- Java備忘筆記 - GitBook

文章推薦指數: 80 %
投票人數:10人

我們知道資料在記憶體中都是以0/1的方式儲存,如果想直接對這些位元做運算,Java提供了一些位元運算子供設計師使用。

Operator運算子. 描述. 範例(令a, b為數值). JJJava備忘筆記Search…JJJava備忘筆記IntroductionJava特性如何開始編譯並執行console編譯並執行Eclipse作者介紹BasicObject-OrientedBasicJavaProgramming第一支Java程式變數資料型態運算子指定、算數、單元運算子關係、條件運算子三元、型態比對運算子位元運算子表達式、敘述、程式區塊流程控制靜態成員static內部類別套件、載入存取修飾子標準輸入ScannerObjectOrientedProgrammingPoweredByGitBook位元運算子了解位元運算子(&|^)與位移運算子(<<>>>>>)的基本使用。

位元運算子我們知道資料在記憶體中都是以0/1的方式儲存,如果想直接對這些位元做運算,Java提供了一些位元運算子供設計師使用。

Operator運算子描述範例(令a,b為數值)~位元補數(complement)運算~a&位元和(and)運算a&b|位元或(or)運算a|b^位元互斥或(exclusiveor)運算a^b補數complement(~):補數的意思就是1變0,0變1,反向的感覺。

範例程式:1inta=45;2System.out.println(a);3a=~a;4System.out.println(a);Copied!執行結果:145//000000000000000000000000001011012-46//11111111111111111111111111010010Copied!和and(&):和運算,是二元運算,只有兩個都為1,結果才是1。

範例程式:1inta=45;2intb=25;3System.out.println(a&b);Copied!執行結果:1//a=000000000000000000000000001011012//b=0000000000000000000000000001100139//00000000000000000000000000001001Copied!AND真值表:&10110000或or(|):或運算,是二元運算,只要有一個1,結果就是1。

範例程式:1inta=45;2intb=25;3System.out.println(a|b);Copied!執行結果:1//a=000000000000000000000000001011012//b=00000000000000000000000000011001361//00000000000000000000000000111101Copied!OR真值表:|10111010互斥或exclusiveor(^):互斥或,英文縮寫常稱『XOR』,是二元運算子,位元不同為1。

程式範例:1inta=45;2intb=25;3System.out.println(a^b);Copied!執行結果;1//a=000000000000000000000000001011012//b=00000000000000000000000000011001352//00000000000000000000000000110100Copied!XOR真值表:^10101010位移運算子BitShiftOperators位移運算子的目的是向左或向右移動目標運算元的每個位元。

Operator運算子描述範例(令a,b為數值)​<>保留正負號的右移運算a>>b(將a逐位元右移b個單位)​>>>右移運算a>>>b​範例程式:1inta=16;2intb=2;3System.out.println(a<>b);5System.out.println(a>>>b);Copied!執行結果:1//a=00000000000000000000000000010000264//0000000000000000000000000100000034//0000000000000000000000000000010044//00000000000000000000000000000100Copied!範例程式2(負號測試):1inta=-16;2intb=2;3System.out.println(a<>b);5System.out.println(a>>>b);Copied!執行結果:1//a=111111111111111111111111111100002-64//111111111111111111111111110000003-4//1111111111111111111111111111110041073741820//00111111111111111111111111111100Copied!(無號右移>>>,不會理會當前的符號位元,直接右移補0上去)※利用位元位移運算子,可以達到最快的*2或/2運算。

嘛,因為根本沒做到數學運算,而乘法跟除法在計算上是很廢時的。

範例程式:1inta=3;2System.out.println(a*2*2*2*2*2);3System.out.println(a<<5);4​5intb=20000;6System.out.println(b/2/2/2/2/2);7System.out.println(b>>5);Copied!執行結果:19629636254625Copied!Previous三元、型態比對運算子Next表達式、敘述、程式區塊Lastmodified1yragoCopylinkContents位元運算子補數complement(~):和and(&):或or(|):互斥或exclusiveor(^):位移運算子BitShiftOperators※利用位元位移運算子,可以達到最快的*2或/2運算。



請為這篇文章評分?