




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、位運(yùn)算符主要針對二進(jìn)制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點(diǎn)像邏輯運(yùn)算符,但邏輯運(yùn)算符是針對兩個關(guān)系運(yùn)算符來進(jìn)行邏輯運(yùn)算,而位運(yùn)算符主要針對兩個二進(jìn)制數(shù)的位進(jìn)行邏輯運(yùn)算。下面詳細(xì)介紹每個位運(yùn)算符。 1與運(yùn)算符與運(yùn)算符用符號“&”表示,其使用規(guī)律如下:兩個操作數(shù)中位都為1,結(jié)果才為1,否則結(jié)果為0,例如下面的程序段。public class data13public static void main(String args)int a=129;int b=128;System.out.println("a 和b 與的結(jié)果是:"+(a
2、&b);運(yùn)行結(jié)果a 和b 與的結(jié)果是:128下面分析這個程序:“a”的值是129,轉(zhuǎn)換成二進(jìn)制就是10000001,而“b”的值是128,轉(zhuǎn)換成二進(jìn)制就是10000000。根據(jù)與運(yùn)算符的運(yùn)算規(guī)律,只有兩個位都是1,結(jié)果才是1,可以知道結(jié)果就是10000000,即128。 2或運(yùn)算符或運(yùn)算符用符號“|”表示,其運(yùn)算規(guī)律如下:兩個位只要有一個為1,那么結(jié)果就是1,否則就為0,下面看一個簡單的例子。public class data14public static void main(String args)int a=129;int b=128;System.out.println
3、("a 和b 或的結(jié)果是:"+(a|b);運(yùn)行結(jié)果a 和b 或的結(jié)果是:129下面分析這個程序段:a 的值是129,轉(zhuǎn)換成二進(jìn)制就是10000001,而b 的值是128,轉(zhuǎn)換成二進(jìn)制就是10000000,根據(jù)或運(yùn)算符的運(yùn)算規(guī)律,只有兩個位有一個是1,結(jié)果才是1,可以知道結(jié)果就是10000001,即129。 3非運(yùn)算符非運(yùn)算符用符號“”表示,其運(yùn)算規(guī)律如下:如果位為0,結(jié)果是1,如果位為1,結(jié)果是0,下面看一個簡單例子。public class data15public static void main(String args)int a=2;System.out.
4、println("a 非的結(jié)果是:"+(a); 4異或運(yùn)算符異或運(yùn)算符是用符號“”表示的,其運(yùn)算規(guī)律是:兩個操作數(shù)的位中,相同則結(jié)果為0,不同則結(jié)果為1。下面看一個簡單的例子。public class data16public static void main(String args)int a=15;int b=2;System.out.println("a 與 b 異或的結(jié)果是:"+(ab);運(yùn)行結(jié)果a 與 b 異或的結(jié)果是:13分析上面的程序段:a 的值是15,轉(zhuǎn)換成二進(jìn)制為1111,而b 的值是2,轉(zhuǎn)換成二進(jìn)制為0010,根據(jù)異或的運(yùn)算
5、規(guī)律,可以得出其結(jié)果為1101 即13。Java中的運(yùn)算符(操作符) 程序的基本功能是處理數(shù)據(jù),任何編程語言都有自己的運(yùn)算符。因?yàn)橛辛诉\(yùn)算符,程序員才寫出表達(dá)式,實(shí)現(xiàn)各種運(yùn)算操作,實(shí)現(xiàn)各種邏輯要求。 為實(shí)現(xiàn)邏輯和運(yùn)算要求,編程語言設(shè)置了各種不同的運(yùn)算符,且有優(yōu)先級順序,所以有的初學(xué)者使用復(fù)雜表達(dá)式的時候搞不清楚。這里詳細(xì)介紹一下Java中的運(yùn)算符。 Java運(yùn)算符很多,下面按優(yōu)先順序列出了各種運(yùn)算符。 優(yōu)先級運(yùn)算符分類結(jié)合順序運(yùn)算符由 高到低分隔符左結(jié)合.
6、; ( ) ; ,一元運(yùn)算符右結(jié)合! + - - 算術(shù)運(yùn)算符移位運(yùn)算符左結(jié)合* / % + -
7、 << >> >>>關(guān)系運(yùn)算符左結(jié)合< > <= >= instanceof(Java 特有) = = !=邏輯運(yùn)算符左結(jié)合! && | & | 三目
8、運(yùn)算符右結(jié)合布爾表達(dá)式?表達(dá)式1:表達(dá)式2賦值運(yùn)算符右結(jié)合= *= /= %= += -= <<= >>= >>>= &= *= |= 一、一元運(yùn)算符 因操作數(shù)是一個,故稱為一元運(yùn)算符。運(yùn)算符含義例子-改變數(shù)值的符號,取反-x(-1*x)逐位取反,屬于位運(yùn)算符x+自加1x+-自減1x-+x 因?yàn)?在前,所以先加
9、后用。x+ 因?yàn)?在后,所以先用后加。注意:a+ +b和a+b是不一樣的(因?yàn)橛幸粋€空格)。 int a=10; int b=10; int sum=a+ +b; System.out.println("a="+a+",b="+b+",sum="+sum);運(yùn)行結(jié)果是: a=10,b=11,sum=21 int a=10; int b=10; int sum=a+b; S
10、ystem.out.println("a="+a+",b="+b+",sum="+sum);運(yùn)行結(jié)果是:a=11,b=10,sum=20n=10;m=n;變量n的二進(jìn)制數(shù)形式: 00000000 00000000 00000000 00001010逐位取反后,等于十進(jìn)制的-11: 11111111 11111111 11111
11、111 11110101 二、算術(shù)運(yùn)算符 所謂算術(shù)運(yùn)算符,就是數(shù)學(xué)中的加、減、乘、除等運(yùn)算。因算術(shù)運(yùn)算符是運(yùn)算兩個操作符,故又稱為二元運(yùn)算符。運(yùn)算符含義例子+加法運(yùn)算x+y-減法運(yùn)算x-y*乘法運(yùn)算x*y/除法運(yùn)算x/y%取模運(yùn)算(求余運(yùn)算)x%y 這些操作可以對不同類型的數(shù)字進(jìn)行混合運(yùn)算,為了保證操作的精度,系統(tǒng)在運(yùn)算過程中會做相應(yīng)的轉(zhuǎn)化。數(shù)字精度的問題,我們在這里不再討論。下圖中展示了運(yùn)算過程中,數(shù)據(jù)自動向上造型的原則。 注:1、實(shí)線箭頭表示沒有信息
12、丟失的轉(zhuǎn)換,也就是安全性的轉(zhuǎn)換,虛線的箭頭表示有精度損失的轉(zhuǎn)化,也就是不安全的。 2、當(dāng)兩個操作數(shù)類型不相同時,操作數(shù)在運(yùn)算前會子松向上造型成相同的類型,再進(jìn)行運(yùn)算。示例如下: java view plaincopy1. int a=22; 2. int b=5; 3. double c=5; 4. 5. System.out.println(b+"+"+c+"="+
13、(b+c); 6. System.out.println(b+"-"+c+"="+(b-c); 7. System.out.println(b+"*"+c+"="+(b*c); 8. System.out.println(a+"/"+b+"="+(a/b); 9. System.out.println(a+"%"+b+"="+(a%b);
14、 10. System.out.println(a+"/"+c+"="+(a/c); 11. System.out.println(a+"%"+c+"="+(a%c); 運(yùn)行結(jié)果如下:5+5.0=10.05-5.0=0.05*5.0=25.022/5=422%5=222/5.0=4.422%5.0=2.0三、移位運(yùn)算符 移位運(yùn)算符操作的對象就是二進(jìn)制的位,可以單獨(dú)用移位運(yùn)算符來處理int型整數(shù)。運(yùn)算符含義例子<<左移運(yùn)算符,將
15、運(yùn)算符左邊的對象向左移動運(yùn)算符右邊指定的位數(shù)(在低位補(bǔ)0)x<<3>>"有符號"右移運(yùn)算 符,將運(yùn)算符左邊的對象向右移動運(yùn)算符右邊指定的位數(shù)。使用符號擴(kuò)展機(jī)制,也就是說,如果值為正,則在高位補(bǔ)0,如果值為負(fù),則在高位補(bǔ)1.x>>3>>>"無符號"右移運(yùn)算 符,將運(yùn)算符左邊的對象向右移動運(yùn)算符右邊指定的位數(shù)。采用0擴(kuò)展機(jī)制,也就是說,無論值的正負(fù),都在高位補(bǔ)0.x>>>3 以int類型的6297為例,代碼如下:java view plaincopy1.
16、 System.out.println(Integer.toBinaryString(6297); 2. System.out.println(Integer.toBinaryString(-6297); 3. System.out.println(Integer.toBinaryString(6297>>5); 4. System.out.println(Integer.toBinaryString(-6297>>5); 5. Sys
17、tem.out.println(Integer.toBinaryString(6297>>>5); 6. System.out.println(Integer.toBinaryString(-6297>>>5); 7. System.out.println(Integer.toBinaryString(6297<<5); 8. System.out.println(Integer.toBinaryString(-6297<<5);
18、160; 運(yùn)行結(jié)果:11000100110011111111111111111111001110110011111000100111111111111111111111111001110111100010011111111111111111110011101111000100110010000011111111111111001110110011100000注:x<<y 相當(dāng)于 x*2y ;x>>y相當(dāng)于x/2y 從計(jì)算速度上講,移位運(yùn)算要比算術(shù)運(yùn)算快。 如果x是
19、負(fù)數(shù),那么x>>>3沒有什么算術(shù)意義,只有邏輯意義。四、關(guān)系運(yùn)算符Java具有完備的關(guān)系運(yùn)算符,這些關(guān)系運(yùn)算符同數(shù)學(xué)中的關(guān)系運(yùn)算符是一致的。具體說明如下:運(yùn)算符含義例子<小于x<y>大于x>y<=小于等于x<=y>=大于等于x>=y=等于x=y!=不等于x!=yinstanceof操作符用于判斷一個引用類型所引用的對象是否是一個類的實(shí)例。操作符左邊的操作元是一個引用類型,右邊的操作元是一個類名或者接口,形式如下:obj instanceof ClassName 或者
20、160; obj instanceof InterfaceName關(guān)系運(yùn)算符產(chǎn)生的結(jié)果都是布爾型的值,一般情況下,在邏輯與控制中會經(jīng)常使用關(guān)系運(yùn)算符,用于選擇控制的分支,實(shí)現(xiàn)邏輯要求。需要注意的是:關(guān)系運(yùn)算符中的"="和"!="既可以操作基本數(shù)據(jù)類型,也可以操作引用數(shù)據(jù)類型。操作引用數(shù)據(jù)類型時,比較的是引用的內(nèi)存地址。所以在比較非基本數(shù)據(jù)類型時,應(yīng)該使用equals方法。五、邏輯運(yùn)算符邏輯非關(guān)系值表A!Atruefalsefalse true 邏輯與關(guān)系值表ABA&&Bfalsefalsefalsetru
21、efalsefalsefalsetruefalsetruetruetrue 邏輯或關(guān)系值表ABA|Bfalsefalsefalsetruefalsetruefalsetrue true truetruetrue 在運(yùn)用邏輯運(yùn)算符進(jìn)行相關(guān)的操作,就不得不說“短路”現(xiàn)象。代碼如下:if(1=1 && 1=2 && 1=3) 代碼從左至右執(zhí)行,執(zhí)行第一個邏輯表達(dá)式后:true && 1=2 && 1=3執(zhí)行第二個邏輯表達(dá)式后:true && f
22、alse && 1=3因?yàn)槠渲杏幸粋€表達(dá)式的值是false,可以判定整個表達(dá)式的值是false,就沒有必要執(zhí)行第三個表達(dá)式了,所以java虛擬機(jī)不執(zhí)行1=3代碼,就好像被短路掉了。邏輯或也存在“短路”現(xiàn)象,當(dāng)執(zhí)行到有一個表達(dá)式的值為true時,整個表達(dá)式的值就為true,后面的代碼就不執(zhí)行了?!岸搪贰爆F(xiàn)象在多重判斷和邏輯處理中非常有用。我們經(jīng)常這樣使用:java view plaincopy1. public void a(String str) 2. if(str!=null &&a
23、mp; str.trim().length()>0) 3. 4. 5. 如果str為null,那么執(zhí)行str.trim().length()就會報(bào)錯,短路現(xiàn)象保證了我們的代碼能夠正確執(zhí)行。在書寫布爾表達(dá)式時,首先處理主要條件,如果主要條件已經(jīng)不滿足,其他條件也就失去了處理的意義。也提高了代碼的執(zhí)行效率。位運(yùn)算是對整數(shù)的二進(jìn)制位進(jìn)行相關(guān)操作,詳細(xì)運(yùn)算如下:非位運(yùn)算值表AA10 0 1與位運(yùn)算值表
24、ABA&B111100010000或位運(yùn)算值表ABA | B111101011000異或位運(yùn)算值表ABA&B110101011000示例如下:java view plaincopy1. int a=15; 2. int b=2; 3. 4. System.out.println(a+"&"+b+"="+(a&b); 5. System.out.println(a+"|"+b+"=&qu
25、ot;+(a|b); 6. System.out.println(a+""+b+"="+(ab); 運(yùn)算結(jié)果如下:15&2=215|2=15152=13程序分析:a111115b00102a&b00102a|b111115ab110113按位運(yùn)算屬于計(jì)算機(jī)低級的運(yùn)算,現(xiàn)在我們也不頻繁的進(jìn)行這樣的低級運(yùn)算了。 六、三目運(yùn)算符 三目運(yùn)算符是一個特殊的運(yùn)算符,它的語法形式如下:布爾表達(dá)式?表達(dá)式1:表達(dá)式2運(yùn)算過程:如果布爾表達(dá)式的值為true,就返回表達(dá)式1的值,否則返回表達(dá)式2的值,例如
26、:int sum=90;String str=sum<100 ? "失敗" : "成功"等價(jià)于下列代碼:String str=null;if(num<100) str="失敗"else str="成功"三目運(yùn)算符和ifelse語句相比,前者使程序代碼更加簡潔。七、賦值運(yùn)算符賦值運(yùn)算符是程序中最常用的運(yùn)算符了,示例如下:運(yùn)算符例子含義+=x+=yx=x+y-=x-=yx=x-y*=x*=yx=x*y/=x/=yx=x/y%=x%=yx=x%y>>=x>>=y
27、x=x>>y>>>=a>>>=yx=x>>>y<<=a<<=yx=x<<y&=x&=yx=x&y|=x|=yx=x|y=x=yx=xy大家可以根據(jù)自己的喜好選擇合適的運(yùn)算符。補(bǔ)充:字符串運(yùn)算符: + 可以連接不同的字符串。轉(zhuǎn)型運(yùn)算符: () 可以將一種類型的數(shù)據(jù)或?qū)ο螅瑥?qiáng)制轉(zhuǎn)變成另一種類型。如果類型不相容,會報(bào)異常出來。java view plain copyprint?1. package com.zf.binary; 2.
28、; 3. 4. public class Test1 5. 6. public static void main(String args) 7. 8.
29、;/* 符號為:最高位同時表示圖號,0為正數(shù),1為負(fù)數(shù) */ 9. 10. /* 11. 1、二進(jìn)制轉(zhuǎn)換為十進(jìn)制 12. 13.
30、 二進(jìn)制轉(zhuǎn)換為10進(jìn)制的規(guī)律為: 每位的值 * 2的(當(dāng)前位-1次方) 14. 例如: 15.
31、00000001 = 0 * 27 + 0 * 26 + 0 * 25 + 0 * 24 + 0 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 1 16.
32、 00000010 = 0 * 27 + 0 * 26 + 0 * 25 + 0 * 24 + 0 * 23 + 0 * 22 + 1 * 21 + 0 *
33、160;20 = 2 17. 18. 2、二進(jìn)制的符號位: 19.
34、 最高位表示符號位,0表示正數(shù) , 1表示負(fù)數(shù) 20. 21. 22.
35、0; 3、將二進(jìn)制負(fù)數(shù)轉(zhuǎn)換為十進(jìn)制:先對該二進(jìn)制數(shù)取反,然后加1,再轉(zhuǎn)換為十進(jìn)制,然后在前面加上負(fù)號 23. 例如: 10101011 最高位為1,所以為負(fù)數(shù) 24.
36、; 第一步:取反: 01010100 25. 第二步:加1 : 01010101 26.
37、60; 第三步:轉(zhuǎn)換為10進(jìn)制:85 27. 第四步:加上負(fù)號: -85 28.
38、; 所以 10101011 轉(zhuǎn)換為十進(jìn)制為 -85 29. 30. 4
39、、將十進(jìn)制負(fù)數(shù)轉(zhuǎn)換為二進(jìn)制:先得到該十進(jìn)制負(fù)數(shù)的絕對值,然后轉(zhuǎn)換為二進(jìn)制,然后將該二進(jìn)制取反,然后加1 31. 例如:-85 32. 第一步:得到絕對值 85 33.
40、0; 第二步:轉(zhuǎn)換為二進(jìn)制:01010101 34. 第二步:取反:
41、0; 10101010 35. 第三步:加1: 10101011 36.
42、60; 所以,-85轉(zhuǎn)換為二進(jìn)制為 10101011 37. */ 38. 39. /* 40.
43、0; 非 運(yùn)算符是將目標(biāo)數(shù)的進(jìn)制去反,即0變成1 ,1變成0 41. 2的二進(jìn)制碼為 00000010 , 它取反為11111101 ,可見取反后結(jié)果為負(fù)數(shù)(二進(jìn)制負(fù)數(shù)轉(zhuǎn)換為十進(jìn)制的步驟為:將二進(jìn)制去反,然后+1) 42.
44、;將 11111101 轉(zhuǎn)換為10進(jìn)制 ,第一步去反 得到 00000010 然后 加1 得到 00000011 ,得到的結(jié)果為3 ,然后在前面加上負(fù)號就可以了 43. 所以結(jié)果為-3 44. */ 45.
45、 System.out.println(2); 46. 47. /* 48. 異或 ,計(jì)算方式為:兩個二進(jìn)制數(shù)的位相同則為0 不同
46、則為1 49. 23轉(zhuǎn)換為二進(jìn)制為:00010111 50. 12轉(zhuǎn)換為二進(jìn)制為:00001100 51.
47、60; 計(jì)算結(jié)果為:00011011 = 27 52. */ 53. System.out.println(23 12); 54. 5
48、5. /* 56. & 按位與 ,計(jì)算方式為:兩個二進(jìn)制數(shù)的位都為1則為1 ,否則為0 57. 1的二進(jìn)制為 :00000001 58.
49、 2的二進(jìn)制為 :00000010 59. 結(jié)果為 :00000000 = 0 60. */ 61. System.out.println(1&2); 62.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年體育教案:第13章 武術(shù)
- 非授權(quán)人員管理制度
- 餐廳及酒吧管理制度
- 2025年咖啡連鎖品牌市場布局與區(qū)域品牌差異化競爭分析報(bào)告
- 餐廳泔水桶管理制度
- 餐飲vip管理制度
- 2025年交通運(yùn)輸行業(yè)物流信息化人才需求與專業(yè)培訓(xùn)改革報(bào)告
- 長治醫(yī)學(xué)院《機(jī)械化施工管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州城市職業(yè)學(xué)院《地理信息系統(tǒng)應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 榆林職業(yè)技術(shù)學(xué)院《動物微生物與免疫學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 以學(xué)為主的歷史教學(xué)心得體會
- 河口區(qū)域生態(tài)規(guī)劃-深度研究
- 臨床試驗(yàn)管理委員會的職責(zé)與流程
- 《西安交通大學(xué)》課件
- 信息化和工業(yè)化融合管理體系 柔性生產(chǎn)指南 征求意見稿
- 科室醫(yī)療質(zhì)量與安全管理小組成員及職責(zé)
- 公車駕駛員安全教育
- 2025年中核匯能有限公司招聘筆試參考題庫含答案解析
- 2023-2024學(xué)年北京市朝陽區(qū)四年級下學(xué)期期末英語真題及答案
- 《選品與采購》課件-4.電商采購
- T-HSPP 0017-2024 含多肽氨基酸水溶肥料
評論
0/150
提交評論