Java常見(jiàn)運(yùn)算符之位運(yùn)算符大全
1. Java 支持的位運(yùn)算符
Java 提供了 7 種位運(yùn)算符:
| 運(yùn)算符 | 名稱 | 描述 | 示例 |
|---|---|---|---|
& | 按位與(AND) | 兩個(gè)位都為 1 時(shí),結(jié)果才為 1 | 5 & 3 → 1 |
| | 按位或(OR) | 兩個(gè)位有一個(gè)為 1 時(shí),結(jié)果就為 1 | 5 | 3 → 7 |
^ | 按位異或(XOR) | 兩個(gè)位不同時(shí),結(jié)果為 1 | 5 ^ 3 → 6 |
~ | 按位取反(NOT) | 所有位取反(0→1,1→0) | ~5 → -6 |
<< | 左移(Left Shift) | 所有位向左移動(dòng),低位補(bǔ) 0 | 5 << 1 → 10 |
>> | 右移(Right Shift) | 所有位向右移動(dòng),高位補(bǔ)符號(hào)位 | -5 >> 1 → -3 |
>>> | 無(wú)符號(hào)右移(Unsigned Right Shift) | 所有位向右移動(dòng),高位補(bǔ) 0 | -5 >>> 1 → 2147483645 |
2. 位運(yùn)算詳解
(1) 按位與(&)
規(guī)則:兩個(gè)位都為 1 時(shí),結(jié)果才為 1,否則為 0。
示例:
int a = 5; // 二進(jìn)制:0101 int b = 3; // 二進(jìn)制:0011 int c = a & b; // 二進(jìn)制:0001 → 1 System.out.println(c); // 輸出:1
應(yīng)用:
判斷奇偶:
(n & 1) == 0→ 偶數(shù)。
(2) 按位或(|)
規(guī)則:兩個(gè)位有一個(gè)為 1 時(shí),結(jié)果就為 1。
示例:
int a = 5; // 0101 int b = 3; // 0011 int c = a | b; // 0111 → 7 System.out.println(c); // 輸出:7
應(yīng)用:
合并多個(gè)標(biāo)志位(如
READ | WRITE | EXECUTE)。
(3) 按位異或(^)
規(guī)則:兩個(gè)位不同時(shí),結(jié)果為 1,否則為 0。
示例:
int a = 5; // 0101 int b = 3; // 0011 int c = a ^ b; // 0110 → 6 System.out.println(c); // 輸出:6
特性:
a ^ a = 0(相同數(shù)異或?yàn)?0)。a ^ 0 = a(任何數(shù)與 0 異或不變)。
應(yīng)用:
交換兩個(gè)數(shù)(不使用臨時(shí)變量):
int x = 5, y = 3; x = x ^ y; y = x ^ y; // y = (x ^ y) ^ y = x x = x ^ y; // x = (x ^ y) ^ x = y System.out.println(x + ", " + y); // 輸出:3, 5
(4) 按位取反(~)
規(guī)則:所有位取反(0→1,1→0)。
示例:
int a = 5; // 0000 0101 int b = ~a; // 1111 1010(補(bǔ)碼表示) System.out.println(b); // 輸出:-6
注意:
Java 使用補(bǔ)碼表示負(fù)數(shù),
~5實(shí)際上是-6。
(5) 左移(<<)
規(guī)則:所有位向左移動(dòng),低位補(bǔ) 0。
示例:
int a = 5; // 0000 0101 int b = a << 1; // 0000 1010 → 10 System.out.println(b); // 輸出:10
應(yīng)用:
快速計(jì)算
a * 2^n(如a << 3=a * 8)。
(6) 右移(>>)
規(guī)則:所有位向右移動(dòng),高位補(bǔ)符號(hào)位(正數(shù)補(bǔ) 0,負(fù)數(shù)補(bǔ) 1)。
示例:
int a = 5; // 0000 0101 int b = a >> 1; // 0000 0010 → 2 int c = -5 >> 1; // 1111 1101 → -3 System.out.println(b + ", " + c); // 輸出:2, -3
應(yīng)用:
快速計(jì)算
a / 2^n(如a >> 2=a / 4)。
(7) 無(wú)符號(hào)右移(>>>)
規(guī)則:所有位向右移動(dòng),高位補(bǔ) 0(不考慮符號(hào)位)。
示例:
int a = -5; // 1111 1111 1111 1111 1111 1111 1111 1011 int b = a >>> 1; // 0111 1111 1111 1111 1111 1111 1111 1101 → 2147483645 System.out.println(b); // 輸出:2147483645
應(yīng)用:
處理無(wú)符號(hào)整數(shù)(Java 沒(méi)有無(wú)符號(hào)類型,但可以用
>>>模擬)。
3. 位運(yùn)算的常見(jiàn)用途
(1) 判斷奇偶
if ((n & 1) == 0) {
System.out.println("偶數(shù)");
} else {
System.out.println("奇數(shù)");
}(2) 交換兩個(gè)數(shù)
int x = 5, y = 3; x = x ^ y; y = x ^ y; x = x ^ y; System.out.println(x + ", " + y); // 輸出:3, 5
(3) 計(jì)算絕對(duì)值
int a = -5; int abs = (a ^ (a >> 31)) - (a >> 31); System.out.println(abs); // 輸出:5
(4) 判斷是否為 2 的冪
boolean isPowerOfTwo = (n & (n - 1)) == 0; System.out.println(isPowerOfTwo); // 8 → true, 7 → false
(5) 快速計(jì)算 2^n
int power = 1 << n; // 2^n System.out.println(power); // n=3 → 8
4. 總結(jié)
| 運(yùn)算符 | 用途 | 示例 |
|---|---|---|
& | 判斷奇偶、權(quán)限控制 | (n & 1) == 0 |
| | 合并標(biāo)志位 | READ | WRITE |
^ | 交換變量、加密 | a ^= b; b ^= a; a ^= b; |
~ | 取反 | ~5 → -6 |
<< | 快速乘以 2^n | 5 << 2 → 20 |
>> | 快速除以 2^n | -5 >> 1 → -3 |
>>> | 無(wú)符號(hào)右移 | -5 >>> 1 → 2147483645 |
到此這篇關(guān)于Java常見(jiàn)運(yùn)算符之位運(yùn)算符的文章就介紹到這了,更多相關(guān)Java位運(yùn)算符大全內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實(shí)現(xiàn)示例
這篇文章主要介紹了Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Java?properties?和?yml?的區(qū)別解析
properties和yml都是Spring?Boot支持的兩種配置文件,它們可以看做Spring?Boot在不同時(shí)期的兩種“產(chǎn)品”,這篇文章主要介紹了Java?properties?和?yml?的區(qū)別,需要的朋友可以參考下2023-02-02
IDEA配置Vue項(xiàng)目啟動(dòng)器的過(guò)程
文章介紹了兩種啟動(dòng)方式一是通過(guò)控制臺(tái)手動(dòng)輸入指令并用Ctrl+C終止;二是配置npm啟動(dòng)器以簡(jiǎn)化測(cè)試流程,提升效率2025-07-07
Spring?boot?RedisTemplate?序列化服務(wù)化配置方式
這篇文章主要介紹了Springboot?RedisTemplate序列化服務(wù)化配置方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
SpringBoot實(shí)現(xiàn)六邊形架構(gòu)的三種不同方式詳解
六邊形架構(gòu),也被稱為端口與適配器架構(gòu)或洋蔥架構(gòu),是一種將業(yè)務(wù)邏輯與外部依賴解耦的架構(gòu)模式,本文將介紹在SpringBoot中實(shí)現(xiàn)六邊形架構(gòu)的三種不同方式2025-06-06
非常適合新手學(xué)生的Java線程池優(yōu)化升級(jí)版
作者是一個(gè)來(lái)自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗(yàn),如有錯(cuò)誤請(qǐng)指正,將來(lái)會(huì)不斷的完善筆記,幫助更多的Java愛(ài)好者入門(mén)2022-03-03
java property配置文件管理工具框架過(guò)程詳解
這篇文章主要介紹了java property配置文件管理工具框架過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
java異常處理執(zhí)行順序詳解try catch finally
try catch語(yǔ)句是java語(yǔ)言用于捕獲異常并進(jìn)行處理的標(biāo)準(zhǔn)方式,對(duì)于try catch及try catch finally執(zhí)行順序必須有深入的了解2021-10-10

