java位操作總結

來源:互聯網
上載者:User

標籤:

在電腦中所有資料都是以二進位的形式儲存的。

位元運算其實就是直接對在記憶體中的位元據進行操作,因此處理資料的速度非常快。

方便示範,首先寫個二進位列印方法:

private static void printNum(int n){String num = Integer.toBinaryString(n);if(num.length() == 32){System.out.println(num);}else{StringBuilder sb = new StringBuilder("");for(int i =0;i < 32 - num.length(); i ++){sb.append("0");}System.out.println(sb.toString() + num);}}

1、~操作符(取反),對應二進位位取反,0變成1,1變成0

int num = 3;printNum(num);printNum(~num);

 結果如下:

00000000000000000000000000000011
11111111111111111111111111111100

 

2、&操作符(與),對應二進位位進行與操作,都為1時變成1,其他變為0

int num1 = 3;int num2 = 7;printNum(num1);printNum(num2);printNum(num1 & num2);

 

結果如下:

00000000000000000000000000000011
00000000000000000000000000000111
00000000000000000000000000000011

 

3、|操作符(或)對應二進位位進行或操作,都為0時變成0,其他變為1

int num1 = 4;int num2 = 7;printNum(num1);printNum(num2);printNum(num1 | num2);

 

結果如下:

00000000000000000000000000000100
00000000000000000000000000000111
00000000000000000000000000000111

 

4、^操作符(異或),對應二進位位相同時,該位變成0,否則變成1

int num1 = 5;int num2 = 9;printNum(num1);printNum(num2);printNum(num1 ^ num2);

 

結果如下:

00000000000000000000000000000101
00000000000000000000000000001001
00000000000000000000000000001100

 

5、<<操作(左移),二進位位向左移動,右邊填充0

int num1 = 5;printNum(num1);printNum(num1 << 2);

 結果如下:

00000000000000000000000000000101
00000000000000000000000000010100

6、>>操作(右移),二進位位向右移動,左邊填充0

int num1 = 5;printNum(num1);printNum(num1 >> 2);

 結果如下:

00000000000000000000000000000101
00000000000000000000000000000001

位操作常見應用

1、不使用中間變數交換兩個數

int num1 = 2;int num2 = 5;num1 = num1^num2;num2 = num2^num1;num1 = num1^num2;System.out.println("num1:" + num1 +"\n"+ "num2:" + num2 );

 2、求2的N次方

//求2的32次方:System.out.println(Math.pow(2, 32));System.out.println(1L<<32);

 

3、判斷奇數偶數

int num1 = 4;int num2 = 9;if(num1%2 == 0){System.out.println("偶數");}else{System.out.println("奇數");}System.out.println((((int)num1&1) == 1) ? "奇數" : "偶數");System.out.println((((int)num2&1) == 1) ? "奇數" : "偶數");

 4、求絕對值

int num = -3;System.out.println(Math.abs(num));int i = num >> 31;  System.out.println(i == 0 ? num : (~num + 1));

 

java位操作總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.