一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 精辟全面且細致的java運算符教程詳解

精辟全面且細致的java運算符教程詳解

2022-02-25 00:36高郵吳少 Java教程

這篇文章主要介紹了java運算符教程,內(nèi)容非常的精辟全面且細致到每一個小注意點,正在學java的同學快快建議收藏閱讀吧,希望能夠有所幫助,祝多多進步早日升職加薪

前言

上一篇java專欄我們講解了java的各個類型,這期我們來繼續(xù)學習java的算術運算符,大家一起行動起來,你就是將來的java大佬!

一、算術運算符

基礎四則運算符和C語言是一樣的,都是+ - * / %
規(guī)則很簡單,但我們需要對除法運算特別注意

1.1 int/int結(jié)果還是int

這里和我們的數(shù)學里的運算是不一樣的,舉個例子:1/2
數(shù)學中我們很快知道這個是0.5,但在計算機語言中,整形/整形結(jié)果會默認是整形,小數(shù)位會被移除,所以java中1/2結(jié)果是0

?
1
2
3
4
5
public static void main(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a/b);//打印0,如果需要小數(shù),要有double
    }

1.2 0不能作為除數(shù)

這個和數(shù)學里是一樣的,0不能作為除數(shù),否則系統(tǒng)會報錯

?
1
2
3
4
5
6
public static void main(String[] args) {
        int a=1;
        int c=0;
        System.out.println(a/c);//0是不能作為除數(shù)的,這里會異常
        System.out.println("hhh");//由于上一行代碼異常了,所以從上面一段開始往后都不執(zhí)行了
    }

1.3 關于%

這個符號是用來求余數(shù)的,比如10/3=3…1,那么10%3=1

?
1
2
3
4
5
6
7
public static void main(String[] args) {
        System.out.println(10%3);//打印1
        System.out.println(-10%3);//-1
        System.out.println(10%-3);//1
        System.out.println(-10%-3);//-1
        System.out.println(11.5%3);//2.5
    }

1.4 增量賦值運算符+= -= *= /=

?
1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
        int a=10;
        a+=1;//a=a+1
        System.out.println(a);//打印11
        short b=1;
        //b=b+1;//直接這樣寫會報錯,因為單獨一個1默認是整形,整形與short型的b相加會提升到整形,直接賦值會出錯
        b=(short)(b+1);//正確寫法1
        b+=1;//正確寫法2
    }

其他增量運算符也是一樣的,a-=n也就是a=a-n,剩下的以此類推
關于short b=1;b+=1;在java中如果是增量賦值運算符,系統(tǒng)會自動幫你進行強制類型轉(zhuǎn)換,但是如果你直接寫b=b+1是會報錯的,這時需要你自己手動強制類型轉(zhuǎn)換

1.5 自增或自減運算

a++和++a的區(qū)別就是,前者是先用a,然后給a+1;后者是先給a+1,然后用a
比如,a=0;if(a++)這里的if里面就是0,因為是先用了a=0,然后給a+1。
a=0;if(++a)這里面的if就是1,因為是先給a+1,a已經(jīng)變成1了,然后用a。

?
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
        int a=10;
        int a2=a++;
        System.out.println(a);//打印11
        System.out.println(a2);//打印10
        int b=10;
        int b2=++b;
        System.out.println(b);//打印11
        System.out.println(b2);//打印11
    }

二、關系運算符

關系運算符共有6個:
== 判斷兩邊是否相等
!=判斷兩邊是否不等
<和>小于和大于符號
<=和> =小于等于和大于等于符號

?
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a==b);//false
        System.out.println(a!=b);//true
        System.out.println(a<b);//true
        System.out.println(a>b);//false
        System.out.println(a<=b);//true
        System.out.println(a>=b);//false
    }

這里和C語言不同的是,C語言中關系運算符成立是1,不成立是0。但java中不一樣,java中關系運算符的表達式返回值都是boolean類型,也就是說,只有true或false沒有1和0
ps:java中判斷是if(布爾表達式)而不是C語言中的if(1/0)

三、邏輯運算符

常用邏輯運算符主要有三個:&&,||,!
注意:邏輯運算符的操作數(shù)(操作數(shù)往往是關系運算符的結(jié)果)和返回值都是boolean

3.1 邏輯與&&

大白話說就是高中我們學的 ^ “且”的意思
也就是說 表達式1&&表達式1 必須全真為真,一假為假
規(guī)則:兩個操作數(shù)都是true,結(jié)果為true,否則結(jié)果為false
ps:短路——如果表達式1是假,表達式整體肯定是假,計算機系統(tǒng)就不會浪費時間去判斷表達式2了。

?
1
2
3
4
5
6
7
public static void main(String[] args) {
        int a=10;
        int b=20;
        int c=30;
        System.out.println(a<b&&b<c);//a<b成立且b<c成立,所以式子整體成立,打印true
        System.out.println(a>b&&b<c);//a>b不成立,不管b<c是否成立,式子整體肯定是false
    }

3.2 邏輯或||

也就是我們高中學的v“或”的意思
表達式1||表達式2 有一真為真,全假為假
規(guī)則:兩個操作數(shù)一個是true,結(jié)果為true,兩操作數(shù)全為false,結(jié)果為false
短路——表達式1為真,表達式整體肯定為真,不用再判斷表達式2了

?
1
2
3
4
5
6
public static void main(String[] args) {
        int a=10;
        int b=20;
        int c=30;
        System.out.println(a<b||b>c);//a<b成立就不用再判斷b>c是否成立了,式子整體肯定為true
    }

3.3 邏輯非!

!布爾表達式
!false=true
!true=false
注意:!是一個單目運算符,只有一個操作數(shù)

?
1
2
3
4
5
6
7
public static void main(String[] args) {
        int a=10;
        int b=20;
        //System.out.println(!a<b);//這樣會報錯
        System.out.println(!(a<b));
        //如果要對a<b這個式子進行真假判斷,必須加括號
    }

注:&和|(不推薦使用)
&和|如果操作數(shù)是boolean時,也可以表示邏輯運算,但是與&&和||相比,它們不支持短路求值。

四、位運算符

java中對數(shù)據(jù)的操作的最小單位不是字節(jié),而是二進制位
位運算符主要有4個:&,|,^,~
位操作表示按二進制位運算,計算機中都是用二進制來表示數(shù)據(jù)(0/1構成的數(shù)字序列),位運算就是按照二進制每一位依次進行計算

4.1 按位與&

如果兩個對應二進制位都是1,結(jié)果為1,否則結(jié)果為0

?
1
2
3
4
5
6
public static void main(String[] args) {
        int a=10;//0000 1010
        int b=20;//0001 0100
        //按位與:  0000 0000 對應的數(shù)字為0
        System.out.println(a&b);//打印0
    }

4.2 按位或|

如果兩個對應二進制位有1,結(jié)果為1,全是0為0

?
1
public static void main(String[] args) {<br>        int a=10;//0000 1010<br>        int b=20;//0001 0100<br>        //按位或:   0001 1110 對應的數(shù)字為30<br>        System.out.println(a|b);//打印30<br>    }<br>

4.3 按位異或^

如果兩個對應二進制位相異為1,相同為0

?
1
public static void main(String[] args) {<br>        int a=10;//0000 1010<br>        int b=30;//0001 1110<br>        //按位異或   0001 0100 對應的數(shù)字為20<br>        System.out.println(a^b);//打印20<br>    }<br>

本質(zhì)就是找不同

4.4 按位取反~

二進制位上是0變成1,1變成0

?
1
2
3
4
5
6
7
public static void main(String[] args) {
        int a=10;//0000 0000 0000 0000 0000 0000 00001010
        //按位取反  1111 1111  1111 1111  1111 1111  1111 0101
        //16進制打印 f    f     f    f      f    f    f    5
        //ps:4位2進制是16種情況,對應16進制的16個數(shù)
        System.out.printf("%x\n",~a);//打印fffffff5
    }

五、移位運算

移位運算符有三個:
<< >> >>>
都是按照二進制位運算
注意:移位移動的是補碼,如果是正數(shù),原碼和補碼一樣,所以你直接移動原碼也可以
,但是如果是負數(shù),你必須先轉(zhuǎn)換成補碼移位,然后再轉(zhuǎn)換成原碼

5.1 左移<<

最左側(cè)位不要了,最右側(cè)補0
比如現(xiàn)在有一個二進制數(shù)0000 1011(十進制11),我們對其進行移1位操作
0000 1011<<1
000 10110(對應十進制的22)
左邊的0不要了,后面往左跟進一位,最右邊會空出一位,我們進行補0操作
實際效果相當于11*2^1

再舉一個例子:仍然是上面的二進制數(shù)0000 1011,進行移2位操作
0000 1011<<2
00 101100(對應十進制的44)
左移兩位,左邊兩個數(shù)就不要了,最右邊會空出2位,我們補0
實際效果相當于11*2^2

?
1
2
3
4
5
public static void main(String[] args) {
        int a=11;
        System.out.println(a<<1);//打印22
        System.out.println(a<<2);//打印44
    }

5.2 右移>>

右移,左邊補符號位
注意:是符號位,是符號位,是符號位(重要的事情說三遍)
比如0000 1011>>1
得到0000 0101(十進制的5)
實際效果相當于11/(2^1)

再舉個例子-11,二進制1000 1011
1000 1011(原)
1111 0100(反)
1111 0101(補)

補碼進行右移1位
1111 1010(新補碼)
1111 1001(新反碼)
1000 0110(新原碼)
新原碼對應十進制數(shù)-6

?
1
2
3
4
5
6
public static void main(String[] args) {
        int a=11;
        int b=-11;
        System.out.println(a>>1);//打印5
        System.out.println(b>>1);//打印-6
    }

5.3 無符號右移>>>

不管符號位是啥,左邊統(tǒng)一補0
由于是無符號了,也就說沒有所謂的負數(shù)了,也就說數(shù)值首位不再是符號位了。
那么1000 1010(十進制138)右移1位,得到0100 0101(十進制的69)

?
1
2
3
4
public static void main(String[] args) {
        int a=138;
        System.out.println(a>>>1);//打印69
    }

那講到這里,大家可能會問,哎,你怎么不講無符號左移啊?
講個笑話:沒有無符號左移
不是說我不講無符號左移啊,是真的這玩意不存在啊哈哈哈。
為什么呢?打個比方,你現(xiàn)在左移一位,那你右邊不還是補0嘛,那這不就是(有符號)左移嗎?

六、條件運算符

條件運算符和c語言一樣:
表達式1?表達式2:表達式3
判斷表達式1是否成立,成立執(zhí)行表達式2,否則執(zhí)行表達式3

?
1
2
3
4
5
6
public static void main(String[] args) {
        int a=10;
        int b=20;
        int max=a>b?a:b;//a>b不成立,執(zhí)行b,也就說b賦值給max
        System.out.println(max);//打印20
    }

總結(jié)

好啦,這就是今天的全部內(nèi)容,內(nèi)容量不大,但都是java必須掌握的知識點,希望讀者耐心學習,最后祝讀者學業(yè)有成。更多關于java運算符教程的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/m0_57180439/article/details/120758261

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产精品免费在线观看 | 成人青青草 | 国产自在自线午夜精品之la | 男人最爱看的网站 | 亚洲风情无码免费视频 | 日韩大片在线播放 | 亚洲第99页 | 视频一区精品 | 国产精品成人麻豆专区 | 亚洲a图 | 成人免费观看网欧美片 | 超级乱淫伦小说全集np | 超强台风免费观看完整版视频 | 女人扒开下面让男人桶爽视频 | 男人天堂资源网 | 好大好硬视频 | 激情三级做爰在线观看激情 | 女同69式互添在线观看免费 | 四虎影免看黄 | 欧美a级v片在线观看一区 | 久久精品国产亚洲AV麻豆欧美玲 | 星空无限传媒xk8129 | 国产免费好大好硬视频 | free chinese麻豆| 午夜影视在线观看 | 国产精品视频免费视频 | 欧美日韩国产最新一区二区 | 成人xxxxxx| 99re热精品这里精品 | 色漫在线观看 | 美女又爽又黄免费 | 黄www片| 网友自拍咪咪爱 | 高清视频大片免费观看 | 色吊丝每日永久访问网站 | 国产精品刺激好大好爽视频 | 91久久青青草原线免费 | 亚洲视频一区网站 | 国产精品videosse | 视频在线91 | 91会员|