java運算子
這個社會很單純,就是手里有技術就能選擇生活,而沒技術的只能選擇生存,當然有人可以做到沒技術沒學歷一樣成功,但那都是小部分人, 希望大家和小編一起努力學習,未來能成功的人,他們都有一個共同點,他們很努力!
運算子
- java運算子
- 知識回顧
- 算術運算子
- 基本的四則運算 + - * / %
- ①:int / int = int
- ②:0 不能作為除數
- %代表取余
- 增量賦值運算子 += -= *= /= %=
- 自增/自減運算子 ++ --
- 關系運算子
- 邏輯運算子(重點)
- 邏輯與 &&
- 邏輯或 ||
- 邏輯非 !
- 位運算子
- 按位與 &:
- 按位或 |:
- 按位取反 ~:
- 按位異或 ^:
- 移位運算(了解即可)
- 左移 <<:
- 右移 >>:
- 無符號右移 >>>:
- 條件運算子
- 運算子優先級
- 小結
- 關于小編
知識回顧
上節課我們學到了java的資料型別,我就不過多的說了,畫一個流程圖讓大家回顧吧!!

小編畫圖技術不高,有些東西想寫上 但不知道怎么操作,會學習的 下一次再畫流程圖一定會非常好看的,這次,,,有點low莫說莫說!!!
| 型別名 | 包裝類 | 所占大小 |
|---|---|---|
| byte | Byte | 1 |
| short | Short | 2 |
| int | Integer | 4 |
| long | Long | 8 |
| char | Character | 2 |
| float | Float | 4 |
| double | Double | 8 |
| boolean | Boolean | 沒有規定明確大小 |
string 他不是基本資料型別 所以沒有包裝類,包裝類是基本資料庫型別僅有的、
大家要注意幾點:
- int 和 char 他們的包裝類不是僅僅將首字母大寫
- 包裝類的作用–上篇博客有提,大家溫故知新的再去看“億”遍
- char 不同于C語言里面的char char 使用Unicode編碼 可表示的范圍更大,包括:中文,啊拉丁文,英文……
- C語言使用的是Ascill碼 英文的字符和常見的字符 范圍是256個數字(因為在C語言中char是int型家族的一員嘛) -128到127 C語言的char有1個位元組 八位
- JDK JRE JVM之間的關系
- java所有型別的位元組大小和平臺沒有任何關系,所以java更容易移植
回顧的就這些咯,下面開始新課咯!!!
算術運算子
基本的四則運算 + - * / %
①:int / int = int
int a = 1;
int b = 2;
System.out.println(a / b);
// 結果為 0
整型除以整型結果還是整型 ,所以我們應該換成double 型來進行計算
②:0 不能作為除數
int a = 1;
int b = 0;
System.out.println(a / b)
// 運行結果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)
下面我來為大家著重介紹一下這個報錯資訊
- Exception in thread “main” 代表錯誤 也就是例外
- java.lang.ArithmeticException: 錯誤的型別–算數例外
- / by zero 就是代表錯誤的原因–0作為除數
- at Test.main(Test.java:5) 程式出錯的地方,在main方法里第12行
%代表取余
不僅僅可以對 int 求模, 也能對 double 來求模
同時我來為大家查缺補漏一波:看下面的代碼

- 10%3==1毫無疑問
- 10%-3呢? (-3)*(-3)+1=10 所以余1
- -10%3呢? 3*(-3)+(-1)=-10 所以余-1
- -10%-3呢? (-3)*3+(-1)=-10 所以余-1
這個是余數也是重點,同時也是之前不會的點!!
下面看小數也能取余(與C語言不同的點)
System.out.println(11.5 % 2.0);
// 運行結果
//1.5
這個結果大家毫無疑問 !重點是不報錯 語法沒有任何問題,所以java可以用浮點數取余嗷
增量賦值運算子 += -= *= /= %=
int a = 10;
a += 1; // 等價于 a = a + 1
System.out.println(a);
在這里小編建議大家 將a+1加上括號 比如下面的式子
x*=y+=a-=b;
x, y ,b,a均已經賦值; 如果不加括號再計算就會很上頭
自增/自減運算子 ++ –
int a = 10;
int b = ++a;//等同于 a=a+1,b=a
System.out.println(b);
int c = a++;//等同于 c=a,a=a+1;
System.out.println(c);
前自增與后自增的區別要記住嗷!!
結論
- 如果不取自增運算的運算式的回傳值, 則前置自增和后置自增沒有區別.
- 如果取運算式的回傳值, 則前置自增的回傳值是自增之后的值, 后置自增的回傳值是自增之前的值.
關系運算子
關系運算子主要有留個 == , !=,<,>,<=,>=
int a = 10;
int b = 20;
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a < b);
System.out.println(a > b);
System.out.println(a <= b);
System.out.println(a >= b);
關系運算子的運算式回傳值都是 boolean 型別.只有 true 與false 兩個結果;
邏輯運算子(重點)
邏輯運算子主要有三個:&&,||,!
注意:邏輯運算子的運算元(運算元往往是關系運算子的結果)和回傳值都是 boolean
邏輯與 &&
規則: 兩個運算元都為 true, 結果為 true, 否則結果為 false.
短路問題:當前面運算元為false時必為假,后面沒必要執行故而造成短路后面運算元不執行
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);//輸出結果為true
邏輯或 ||
規則: 兩個運算元都為 false, 結果為 false, 否則結果為 true
短路問題:當前面運算元為true時必為真時,后面沒必要執行故而造成短路后面運算元不執行
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || b < c);//回傳了true
邏輯非 !
規則: 運算元為 true, 結果為 false; 運算元為 false, 結果為 true(這是個單目運算子, 只有一個運算元).
int a = 10;
int b = 20;
System.out.println(!a<b);//為false
大家看對嗎?
錯,這樣寫不對 因為邏輯非的運算元為布爾型別 a是整型 所以錯誤 將a<b加上括號 才能得到我們想要的結果!!!
& 和 | (不推薦使用)
& 和 | 如果運算元為 boolean 的時候, 也表示邏輯運算. 但是和 && 以及 || 相比, 它們不支持短路求值.
不推薦使用我就不過多介紹了嗷!
位運算子
Java 中對資料的操作的最小單位不是位元組, 而是二進制位.
位運算主要包括 & | ~ ^
按位與 &:
如果兩個二進制位都是 1, 則結果為 1, 否則結果為 0
int a = 10;//0000 1010
int b = 20;//0001 0100
System.out.println(a & b);//最終結果為0000 0000
按位或 |:
如果兩個二進制位都是 0, 則結果為 0, 否則結果為 1.
int a = 10;//0000 1010
int b = 20;//0001 0100
System.out.println(a | b);//0001 1110
注意: 當 & 和 | 的運算元為整數(int, short, long, byte) 的時候, 表示按位運算, 當運算元為 boolean 的時候, 表示邏輯
運算.
按位取反 ~:
如果該位為 0 則轉為 1, 如果該位為 1 則轉為 0
int a = 0xf;
System.out.printf("%x\n", ~a)
變0為1 變1 為0 這個很容易嗷,大家要計算計算這里我不寫了
注意
- 0x 前綴的數字為 十六進制 數字. 十六進制可以看成是二進制的簡化表示方式. 一個十六進制數字對應 4 個二進
制位. - 0xf 表示 10 進制的 15, 也就是二進制的 1111
- printf 能夠格式化輸出內容, %x 表示按照十六進制輸出.
- \n 表示換行符
按位異或 ^:
相同為0 不同為1
int a = 0x1;//0000 0001
int b = 0x2;//0000 0010
System.out.printf("%x\n", a ^ b);//0000 0011
這里大家要記住一句話 相同的兩個數異或為0 .與0異或的數 等于它本身,這個以后做題會用得到,我會慢慢給大家分享的
移位運算(了解即可)
移位運算子有三個:
<< >> >>>
都是按照二進制位來運算.
左移 <<:
最左側位不要了, 最右側補 0.
int a = 0x10;
System.out.printf("%x\n", a << 1);
// 運行結果(注意, 是按十六進制列印的) 20
右移 >>:
最右側位不要了, 最左側補符號位(正數補0, 負數補1)
int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 運行結果(注意, 是按十六進制列印的)
//8
int b = 0xffff0000;
System.out.printf("%x\n", b >> 1);
// 運行結果(注意, 是按十六進制列印的)
//ffff8000
無符號右移 >>>:
最右側位不要了, 最左側補 0.
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 運行結果(注意, 是按十六進制列印的)
//7fffffff
注意:
5. 左移 1 位, 相當于原數字 * 2. 左移 N 位, 相當于原數字 * 2 的N次方.
6. 右移 1 位, 相當于原數字 / 2. 右移 N 位, 相當于原數字 / 2 的N次方.
7. 由于計算機計算移位效率高于計算乘除, 當某個代碼正好乘除 2 的N次方的時候可以用移位運算代替.
8. 移動負數位或者移位位數過大都沒有意義.
條件運算子
運算式1 ? 運算式2 : 運算式3
- 當 運算式1 的值為 true 時, 整個運算式的值為 運算式2 的值;
- 當 運算式1 的值為 false 時, 整個運算式的值為 運算式3 的值.
也是 Java 中唯一的一個 三目運算子, 是條件判斷陳述句的簡化寫法.
// 求兩個整數的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
運算子優先級
這個就是一句話,別記 用得著的時候加括號!!!!!!!
小結
- % 操作再 Java 中也能針對 double 來計算.
- 需要區分清楚 前置自增 和 后置自增之間的區別.
- 由于 Java 是強型別語言, 因此對于型別檢查較嚴格, 因此像 && 之類的運算運算元必須是 boolean.
- 要區分清楚 & 和 | 什么時候是表示按位運算, 什么時候表示邏輯運算
關于小編
小編是一名大一學生 一直跟著b站上的大博哥學習java
學校開設的課程是C++ 自己琢磨著 在學校先研究一遍c++回頭再仔細研究這樣會不很吃力,所以便開始了java學習,希望大家能從一開始學習,努努力,一起變強為了更好的明天奮斗!!!!
小編的QQ號是:2206730228
歡迎大家來騷擾 一起探討編程的奧秘,
小編是個農村人 別來欺負小編啥都不懂嗷
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/272287.html
標籤:其他
上一篇:第二章 初識C語言常量
