前言:
作者簡(jiǎn)介:愛(ài)吃大白菜1132
人生格言:紙上得來(lái)終覺(jué)淺,絕知此事要躬行
?
如果文章知識(shí)點(diǎn)有錯(cuò)誤的地方不吝賜教,和大家一起學(xué)習(xí),一起進(jìn)步!
?
如果覺(jué)得博主文章還不錯(cuò)的話,希望三連支持!
目錄
什么是運(yùn)算符?
1.算數(shù)運(yùn)算符?
基本四則運(yùn)算符:加減乘除模(+ - * / %)?
增量運(yùn)算符 (+=; -=; *= ;%=)
?自增/自減運(yùn)算符(++/--)
2.關(guān)系運(yùn)算符?
?3.邏輯運(yùn)算符(重點(diǎn))
邏輯與 (&&)
邏輯或?(||)
邏輯非 (!)
4.位運(yùn)算符
按位與?(&)
按位或 (|)
按位取反 (~)
按位異或 (^)
5.移位運(yùn)算符
左移 (<<)
右移 (>>)
?無(wú)符號(hào)右移 (>>>)
什么是運(yùn)算符?
????????計(jì)算機(jī)的最基本的用途之一就是執(zhí)行數(shù)學(xué)運(yùn)算。
????????Java提供了一套豐富的運(yùn)算符來(lái)操作變量。Java中運(yùn)算符可分為以下:算術(shù)運(yùn)算符(+ - * /)、關(guān)系運(yùn)算符(< > ==)、邏輯運(yùn)算符、位運(yùn)算符、移位運(yùn)算符以及條件運(yùn)算符等。
1.算數(shù)運(yùn)算符?
基本四則運(yùn)算符:加減乘除模(+ - * / %)?
public class Test_10_29 {
public static void main(String[] args) {
int a=20;
int b=10;
System.out.println(a+b);//30
System.out.println(a-b);//10
System.out.println(a*b);//200
System.out.println(a/b);//2
System.out.println(a%b);//0
}
}
注:
- 四則運(yùn)算符都是二元運(yùn)算符,使用時(shí)必須要有左右兩個(gè)操作數(shù)
- 做除法和取模時(shí),右操作數(shù)不能為0?
- % 不僅可以對(duì)整型取模,也可以對(duì)double類(lèi)型取模,但是沒(méi)有意義,一般都是對(duì)整型取模的?
- ?兩側(cè)操作數(shù)類(lèi)型不一致時(shí),向類(lèi)型大的提升?
增量運(yùn)算符 (+=; -=; *= ;%=)
????????該種類(lèi)型運(yùn)算符操作完成后,會(huì)將操縱的結(jié)果賦值給左操作數(shù)。
public static void main(String[] args) {
int a=10;
a+=2; //a=a+2
System.out.println(a);
a=10;
a-=3; //a=a-3
System.out.println(a);
a=10;
a*=2; //a=a*2
System.out.println(a);
a=10;
a/=2; //a=a/2
System.out.println(a);
a=10;
a%=3; //a=a%3
System.out.println(a);
}
?注:
? ? ? ? 增量運(yùn)算符只有變量才能使用該運(yùn)算符,常量不能使用。
?自增/自減運(yùn)算符(++/--)
public static void main(String[] args) {
int a=1;
System.out.println(a++);//先輸出,再加1;輸出的是1
a=1;
System.out.println(++a);//先加1.再輸出;輸出的是2
}
?注:
- 如果單獨(dú)使用,【前置++】和【后置++】沒(méi)有任何區(qū)別
- 如果混合使用,【前置++】先+1,然后使用變量+1之后的值,【后置++】先使用變量原來(lái)的值,表達(dá)式 結(jié)束時(shí)給變量+1
- 只有變量才能使用自增/自減運(yùn)算符,常量不能使用,因?yàn)槌A坎辉试S被修改
2.關(guān)系運(yùn)算符?
????????關(guān)系運(yùn)算符主要有六個(gè): ==、 !、=、 < 、> 、= ,其計(jì)算結(jié)果是 true 或者 false 。 ?
public static void main(String[] args) {
int a=1;
int b=2;
System.out.println(a==b);//false
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a>=b);//false
System.out.println(a<=b);//true
}
?3.邏輯運(yùn)算符(重點(diǎn))
????????邏輯運(yùn)算符主要有三個(gè): && 、||、 ! ,運(yùn)算結(jié)果都是 boolean類(lèi)型。?
邏輯與 (&&)
????????語(yǔ)法規(guī)則:布爾表達(dá)式1 && 布爾表達(dá)式2
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左為真 且 右為真 則結(jié)果為真
System.out.println(a == 1 && b > 100); // 左為真 但 右為假 則結(jié)果為假
System.out.println(a > 100 && b == 2); // 左為假 但 右為真 則結(jié)果為假
System.out.println(a > 100 && b > 100); // 左為假 且 右為假 則結(jié)果為假
}
????????判斷真假方式:?
表達(dá)式1 | 表達(dá)式2 | 結(jié)果 |
真 | 真 | 真 |
真 | 假 | 假 |
假 | 真 | 假 |
假 | 假 | 假 |
特點(diǎn):
- 如果表達(dá)式1為真,那么就會(huì)繼續(xù)執(zhí)行表達(dá)式2,如果表達(dá)式2為真,那么整體為真。
- 如果表達(dá)式1為假,那么就不執(zhí)行表達(dá)式2,整體為假;因此特點(diǎn),邏輯與又被稱(chēng)為短路與。
- 兩個(gè)表達(dá)式必須都為真整體才為真;只要有一個(gè)為假,那么整體就為假
邏輯或?(||)
?語(yǔ)法規(guī)則:布爾表達(dá)式1 || 布爾表達(dá)式2
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2); // 左為真 且 右為真 則結(jié)果為真
System.out.println(a == 1 || b > 100); // 左為真 但 右為假 則結(jié)果也為真
System.out.println(a > 100 || b == 2); // 左為假 但 右為真 則結(jié)果也為真
System.out.println(a > 100 || b > 100); // 左為假 且 右為假 則結(jié)果為假
}
????????判斷真假方式:
表達(dá)式1 | 表達(dá)式2 | 結(jié)果 |
真 | 真 | 真 |
真 | 假 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
?特點(diǎn):
- 如果表達(dá)式1為真,就不執(zhí)行表達(dá)式2,整體已經(jīng)為真,就已經(jīng)發(fā)生短路。
- 如果表達(dá)式1為假,就繼續(xù)執(zhí)行表達(dá)式2,表達(dá)式2為真,整體為真。
- 兩個(gè)表達(dá)式只要有一個(gè)為真整體就為真;兩個(gè)都為假整體才為假。
邏輯非 (!)
語(yǔ)法規(guī)則:! 表達(dá)式?
真變假,假變真。?
表達(dá)式 | 結(jié)果 |
真 | 假 |
假 | 真 |
4.位運(yùn)算符
????????Java 中數(shù)據(jù)存儲(chǔ)的最小單位是字節(jié),而數(shù)據(jù)操作的最小單位是比特位. 字節(jié)是最小的存儲(chǔ)單位,每個(gè)字節(jié)是由8個(gè)二 進(jìn)制比特位組成的,多個(gè)字節(jié)組合在一起可以表示各種不同的數(shù)據(jù)。?
????????位運(yùn)算符主要有四個(gè): & 、|、 ~、 ^ ,除 ~ 是一元運(yùn)算符外,其余都是二元運(yùn)算符。?
按位與?(&)
????????如果兩個(gè)二進(jìn)制位都是 1, 則結(jié)果為 1, 否則結(jié)果為 0?
按位或 (|)
????????如果兩個(gè)二進(jìn)制位都是 0, 則結(jié)果為 0, 否則結(jié)果為 1.?
?注:
????????當(dāng) & 和 | 的操作數(shù)為整數(shù)(int, short, long, byte) 的時(shí)候, 表示按位運(yùn)算, 當(dāng)操作數(shù)為 boolean 的時(shí)候, 表 示邏輯運(yùn)算。
按位取反 (~)
????????如果該位為 0 則轉(zhuǎn)為 1, 如果該位為 1 則轉(zhuǎn)為 0
按位異或 (^)
????????如果兩個(gè)數(shù)字的二進(jìn)制位相同, 則結(jié)果為 0, 相異則結(jié)果為 1.
注:如果兩個(gè)數(shù)相同,則異或的結(jié)果為0?
5.移位運(yùn)算符
????????移位運(yùn)算符有三個(gè): <<、>>、?>>> ,都是二元運(yùn)算符,且都是按照二進(jìn)制比特位來(lái)運(yùn)算的。 ?
左移 (<<)
????????最左側(cè)位不要了, 最右側(cè)補(bǔ) 0.?
int a = 0x10;
System.out.printf("%x\n", a << 1);
// 運(yùn)行結(jié)果(注意, 是按十六進(jìn)制打印的)
20
?注:
- 向左移位時(shí),丟棄的是符號(hào)位,因此正數(shù)左移可能會(huì)編程負(fù)數(shù)。
- 左移 1 位, 相當(dāng)于原數(shù)字 * 2. 左移 N 位, 相當(dāng)于原數(shù)字 * 2 的N次方.
右移 (>>)
????????最右側(cè)位不要了, 最左側(cè)補(bǔ)符號(hào)位(正數(shù)補(bǔ)0, 負(fù)數(shù)補(bǔ)1)?
int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 運(yùn)行結(jié)果(注意, 是按十六進(jìn)制打印的)
8
int b = 0xffff0000;
System.out.printf("%x\n", b >> 1);
// 運(yùn)行結(jié)果(注意, 是按十六進(jìn)制打印的)
ffff8000
注:
- 左移 N 位, 相當(dāng)于原數(shù)字 * 2 的N次方. 2. 右移 1 位, 相當(dāng)于原數(shù)字 / 2. 右移 N 位, 相當(dāng)于原數(shù)字 / 2 的N次方.
?無(wú)符號(hào)右移 (>>>)
????????最右側(cè)位不要了, 最左側(cè)補(bǔ) 0.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-482042.html
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 運(yùn)行結(jié)果(注意, 是按十六進(jìn)制打印的)
7fffffff
?總結(jié):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-482042.html
- 左移 1 位, 相當(dāng)于原數(shù)字 * 2. 左移 N 位, 相當(dāng)于原數(shù)字 * 2 的N次方.
- 左移 N 位, 相當(dāng)于原數(shù)字 * 2 的N次方. 2. 右移 1 位, 相當(dāng)于原數(shù)字 / 2. 右移 N 位, 相當(dāng)于原數(shù)字 / 2 的N次方.
- ?由于計(jì)算機(jī)計(jì)算移位效率高于計(jì)算乘除, 當(dāng)某個(gè)代碼正好乘除 2 的N次方的時(shí)候可以用移位運(yùn)算代替.
- 移動(dòng)負(fù)數(shù)位或者移位位數(shù)過(guò)大都沒(méi)有意義.?
到了這里,關(guān)于【JavaSE】一篇文章領(lǐng)悟Java運(yùn)算符的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!