位運算符主要針對二進制_第1頁
位運算符主要針對二進制_第2頁
位運算符主要針對二進制_第3頁
位運算符主要針對二進制_第4頁
位運算符主要針對二進制_第5頁
已閱讀5頁,還剩11頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算符,但邏輯運算符是針對兩個關系運算符來進行邏輯運算,而位運算符主要針對兩個二進制數的位進行邏輯運算。下面詳細介紹每個位運算符。 1與運算符與運算符用符號“&”表示,其使用規律如下:兩個操作數中位都為1,結果才為1,否則結果為0,例如下面的程序段。public class data13public static void main(String args)int a=129;int b=128;System.out.println("a 和b 與的結果是:"+(a

2、&b);運行結果a 和b 與的結果是:128下面分析這個程序:“a”的值是129,轉換成二進制就是10000001,而“b”的值是128,轉換成二進制就是10000000。根據與運算符的運算規律,只有兩個位都是1,結果才是1,可以知道結果就是10000000,即128。 2或運算符或運算符用符號“|”表示,其運算規律如下:兩個位只要有一個為1,那么結果就是1,否則就為0,下面看一個簡單的例子。public class data14public static void main(String args)int a=129;int b=128;System.out.println

3、("a 和b 或的結果是:"+(a|b);運行結果a 和b 或的結果是:129下面分析這個程序段:a 的值是129,轉換成二進制就是10000001,而b 的值是128,轉換成二進制就是10000000,根據或運算符的運算規律,只有兩個位有一個是1,結果才是1,可以知道結果就是10000001,即129。 3非運算符非運算符用符號“”表示,其運算規律如下:如果位為0,結果是1,如果位為1,結果是0,下面看一個簡單例子。public class data15public static void main(String args)int a=2;System.out.

4、println("a 非的結果是:"+(a); 4異或運算符異或運算符是用符號“”表示的,其運算規律是:兩個操作數的位中,相同則結果為0,不同則結果為1。下面看一個簡單的例子。public class data16public static void main(String args)int a=15;int b=2;System.out.println("a 與 b 異或的結果是:"+(ab);運行結果a 與 b 異或的結果是:13分析上面的程序段:a 的值是15,轉換成二進制為1111,而b 的值是2,轉換成二進制為0010,根據異或的運算

5、規律,可以得出其結果為1101 即13。Java中的運算符(操作符)    程序的基本功能是處理數據,任何編程語言都有自己的運算符。因為有了運算符,程序員才寫出表達式,實現各種運算操作,實現各種邏輯要求。   為實現邏輯和運算要求,編程語言設置了各種不同的運算符,且有優先級順序,所以有的初學者使用復雜表達式的時候搞不清楚。這里詳細介紹一下Java中的運算符。    Java運算符很多,下面按優先順序列出了各種運算符。  優先級運算符分類結合順序運算符由 高到低分隔符左結合.  

6、;       ( )     ;      ,一元運算符右結合!  +     -     -   算術運算符移位運算符左結合*     /      %    +     - 

7、     <<   >>   >>>關系運算符左結合<     >     <=   >=   instanceof(Java 特有)   = =  !=邏輯運算符左結合! &&  |    &  |   三目

8、運算符右結合布爾表達式?表達式1:表達式2賦值運算符右結合=  *=     /=  %=   +=   -=    <<= >>= >>>=  &=  *=  |= 一、一元運算符    因操作數是一個,故稱為一元運算符。運算符含義例子-改變數值的符號,取反-x(-1*x)逐位取反,屬于位運算符x+自加1x+-自減1x-+x 因為+在前,所以先加

9、后用。x+ 因為+在后,所以先用后加。注意:a+ +b和a+b是不一樣的(因為有一個空格)。  int a=10;  int b=10;  int sum=a+ +b;  System.out.println("a="+a+",b="+b+",sum="+sum);運行結果是: 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);運行結果是:a=11,b=10,sum=20n=10;m=n;變量n的二進制數形式:                 00000000 00000000 00000000 00001010逐位取反后,等于十進制的-11: 11111111 11111111 11111

11、111 11110101 二、算術運算符    所謂算術運算符,就是數學中的加、減、乘、除等運算。因算術運算符是運算兩個操作符,故又稱為二元運算符。運算符含義例子+加法運算x+y-減法運算x-y*乘法運算x*y/除法運算x/y%取模運算(求余運算)x%y    這些操作可以對不同類型的數字進行混合運算,為了保證操作的精度,系統在運算過程中會做相應的轉化。數字精度的問題,我們在這里不再討論。下圖中展示了運算過程中,數據自動向上造型的原則。      注:1、實線箭頭表示沒有信息

12、丟失的轉換,也就是安全性的轉換,虛線的箭頭表示有精度損失的轉化,也就是不安全的。      2、當兩個操作數類型不相同時,操作數在運算前會子松向上造型成相同的類型,再進行運算。示例如下: 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);  運行結果如下: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三、移位運算符   移位運算符操作的對象就是二進制的位,可以單獨用移位運算符來處理int型整數。運算符含義例子<<左移運算符,將

15、運算符左邊的對象向左移動運算符右邊指定的位數(在低位補0)x<<3>>"有符號"右移運算 符,將運算符左邊的對象向右移動運算符右邊指定的位數。使用符號擴展機制,也就是說,如果值為正,則在高位補0,如果值為負,則在高位補1.x>>3>>>"無符號"右移運算 符,將運算符左邊的對象向右移動運算符右邊指定的位數。采用0擴展機制,也就是說,無論值的正負,都在高位補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;    運行結果:11000100110011111111111111111111001110110011111000100111111111111111111111111001110111100010011111111111111111110011101111000100110010000011111111111111001110110011100000注:x<<y 相當于 x*2y ;x>>y相當于x/2y    從計算速度上講,移位運算要比算術運算快。    如果x是

19、負數,那么x>>>3沒有什么算術意義,只有邏輯意義。四、關系運算符Java具有完備的關系運算符,這些關系運算符同數學中的關系運算符是一致的。具體說明如下:運算符含義例子<小于x<y>大于x>y<=小于等于x<=y>=大于等于x>=y=等于x=y!=不等于x!=yinstanceof操作符用于判斷一個引用類型所引用的對象是否是一個類的實例。操作符左邊的操作元是一個引用類型,右邊的操作元是一個類名或者接口,形式如下:obj instanceof ClassName      或者&#

20、160;   obj instanceof InterfaceName關系運算符產生的結果都是布爾型的值,一般情況下,在邏輯與控制中會經常使用關系運算符,用于選擇控制的分支,實現邏輯要求。需要注意的是:關系運算符中的"="和"!="既可以操作基本數據類型,也可以操作引用數據類型。操作引用數據類型時,比較的是引用的內存地址。所以在比較非基本數據類型時,應該使用equals方法。五、邏輯運算符邏輯非關系值表A!Atruefalsefalse true 邏輯與關系值表ABA&&Bfalsefalsefalsetru

21、efalsefalsefalsetruefalsetruetruetrue  邏輯或關系值表ABA|Bfalsefalsefalsetruefalsetruefalsetrue   true truetruetrue 在運用邏輯運算符進行相關的操作,就不得不說“短路”現象。代碼如下:if(1=1 && 1=2 && 1=3)  代碼從左至右執行,執行第一個邏輯表達式后:true && 1=2 && 1=3執行第二個邏輯表達式后:true && f

22、alse && 1=3因為其中有一個表達式的值是false,可以判定整個表達式的值是false,就沒有必要執行第三個表達式了,所以java虛擬機不執行1=3代碼,就好像被短路掉了。邏輯或也存在“短路”現象,當執行到有一個表達式的值為true時,整個表達式的值就為true,后面的代碼就不執行了。“短路”現象在多重判斷和邏輯處理中非常有用。我們經常這樣使用:java view plaincopy1. public void a(String str)  2.   if(str!=null &&a

23、mp; str.trim().length()>0)  3.       4.     5.   如果str為null,那么執行str.trim().length()就會報錯,短路現象保證了我們的代碼能夠正確執行。在書寫布爾表達式時,首先處理主要條件,如果主要條件已經不滿足,其他條件也就失去了處理的意義。也提高了代碼的執行效率。位運算是對整數的二進制位進行相關操作,詳細運算如下:非位運算值表AA10  0 1與位運算值表

24、ABA&B111100010000或位運算值表ABA | B111101011000異或位運算值表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);  運算結果如下:15&2=215|2=15152=13程序分析:a111115b00102a&b00102a|b111115ab110113按位運算屬于計算機低級的運算,現在我們也不頻繁的進行這樣的低級運算了。 六、三目運算符 三目運算符是一個特殊的運算符,它的語法形式如下:布爾表達式?表達式1:表達式2運算過程:如果布爾表達式的值為true,就返回表達式1的值,否則返回表達式2的值,例如

26、:int sum=90;String str=sum<100 ? "失敗" : "成功"等價于下列代碼:String str=null;if(num<100)  str="失敗"else  str="成功"三目運算符和ifelse語句相比,前者使程序代碼更加簡潔。七、賦值運算符賦值運算符是程序中最常用的運算符了,示例如下:運算符例子含義+=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大家可以根據自己的喜好選擇合適的運算符。補充:字符串運算符: + 可以連接不同的字符串。轉型運算符: () 可以將一種類型的數據或對象,強制轉變成另一種類型。如果類型不相容,會報異常出來。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為正數,1為負數 */  9.           10.         /*  11.             1、二進制轉換為十進制 12.  13.   

30、          二進制轉換為10進制的規律為: 每位的值 * 2的(當前位-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、二進制的符號位: 19.            

34、     最高位表示符號位,0表示正數  , 1表示負數 20.                  21.              22.      

35、0;      3、將二進制負數轉換為十進制:先對該二進制數取反,然后加1,再轉換為十進制,然后在前面加上負號 23.                 例如: 10101011 最高位為1,所以為負數 24.            

36、;        第一步:取反: 01010100 25.                    第二步:加1 : 01010101 26.            

37、60;       第三步:轉換為10進制:85 27.                    第四步:加上負號: -85 28.                

38、;    所以      10101011 轉換為十進制為 -85 29.                     30.             4

39、、將十進制負數轉換為二進制:先得到該十進制負數的絕對值,然后轉換為二進制,然后將該二進制取反,然后加1 31.                 例如:-85 32.                 第一步:得到絕對值 85 33. 

40、0;               第二步:轉換為二進制:01010101 34.                 第二步:取反:            

41、0;   10101010 35.                 第三步:加1:                 10101011 36.       

42、60;         所以,-85轉換為二進制為  10101011 37.          */  38.           39.         /* 40. 

43、0;        非 運算符是將目標數的進制去反,即0變成1 ,1變成0 41.         2的二進制碼為 00000010 , 它取反為11111101 ,可見取反后結果為負數(二進制負數轉換為十進制的步驟為:將二進制去反,然后+1) 42.          

44、;將 11111101 轉換為10進制 ,第一步去反 得到 00000010 然后 加1 得到 00000011 ,得到的結果為3 ,然后在前面加上負號就可以了 43.          所以結果為-3 44.          */  45.   

45、      System.out.println(2);  46.           47.         /* 48.            異或 ,計算方式為:兩個二進制數的位相同則為0 不同

46、則為1 49.           23轉換為二進制為:00010111 50.           12轉換為二進制為:00001100 51.                   

47、60; 計算結果為:00011011  =  27 52.          */  53.         System.out.println(23  12);   54.           5

48、5.         /* 56.          & 按位與 ,計算方式為:兩個二進制數的位都為1則為1 ,否則為0 57.          1的二進制為 :00000001 58.       

49、   2的二進制為 :00000010 59.               結果為 :00000000 = 0  60.          */  61.         System.out.println(1&2);  62.       

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論