位運(yùn)算符主要針對二進(jìn)制_第1頁
位運(yùn)算符主要針對二進(jìn)制_第2頁
位運(yùn)算符主要針對二進(jìn)制_第3頁
位運(yùn)算符主要針對二進(jìn)制_第4頁
位運(yùn)算符主要針對二進(jìn)制_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論