华南俳烁实业有限公司

java

當前位置:中華考試網(wǎng) >> java >> java教程 >> 文章內(nèi)容

java中的位運算符和運算符優(yōu)先級

來源:中華考試網(wǎng)  [2020年11月10日]  【

  1 位運算符

  一共3個移位運算符,左移位<<,右移位>>和無符號移位>>>。左移位<<在低位處補0。右移 位>>若值為正則在高位插入0,若值為負則在高位插入1。無符號右移位>>>無論正負都在高位處插入0。

  非運算符~

  &(與運算)對兩個整型操作數(shù)中對應位執(zhí)行布爾代數(shù),兩個位都為1時輸出1,否則0。

  ^(異或運算先做或運算再做運算)對兩個整型操作數(shù)中對應位執(zhí)行布爾代數(shù),兩個位相等0,不等1。

  |(或運算)對兩個整型操作數(shù)中對應位執(zhí)行布爾代數(shù),兩個位都為0時輸出0,否則1。

  如:

  以下哪種運算正確:

  A. 1010 0000 0000 0000 0000 0000 0000 0000 >> 4

  gives 0000 1010 0000 0000 0000 0000 0000 0000

  B. 1010 0000 0000 0000 0000 0000 0000 0000 >> 4

  gives 1111 1010 0000 0000 0000 0000 0000 0000

  C. 1010 0000 0000 0000 0000 0000 0000 0000 >>> 4

  gives 0000 1010 0000 0000 0000 0000 0000 0000

  D. 1010 0000 0000 0000 0000 0000 0000 0000 >>> 4

  gives 1111 1010 0000 0000 0000 0000 0000 0000

  選:B C

  以下哪一運算正確:

  A. 0000 0100 0000 0000 0000 0000 0000 0000 << 5

  gives 1000 0000 0000 0000 0000 0000 0000 0000

  B. 0000 0100 0000 0000 0000 0000 0000 0000 << 5

  gives 1111 1100 0000 0000 0000 0000 0000 0000

  C. 1100 0000 0000 0000 0000 0000 0000 0000 >> 5

  gives 1111 1110 0000 0000 0000 0000 0000 0000

  D. 1100 0000 0000 0000 0000 0000 0000 0000 >> 5

  gives 0000 0110 0000 0000 0000 0000 0000 0000

  選:A C

  Given:

  1.Public class test (

  2. Public static void main (String args[]) (

  3. System.out.printIn (6 ^ 3);

  4. )

  5.)

  What is the output

  Ans: 5

  2 位運算符返回的是數(shù)值,不是boolean類型值

  如:

  if(5&7>0 && 5|2)

  System.out.println("true");

  顯示:編譯出錯

  3 對于一個整型數(shù)進行移位,其右操作數(shù)應該小于32,對于一個長整型數(shù)進行移位,其右操作數(shù)應該小于64。如果右操作數(shù)大于了規(guī)定的位數(shù),編譯不會報錯,取右操作數(shù)的模來進行移位操作。

  如:

  class Test

  {

  public static void main(String args[])

  {

  int x= 16384;

  System.out.println(x>>33);

  }

  }

  顯示:8192

  4 注意進行位操作時,會自動轉(zhuǎn)成int型,轉(zhuǎn)換之后,可接受右操作數(shù)長度為32。進行位運算時,總是先將短整型和字節(jié)型值轉(zhuǎn)換成整型值再進行移位操作的。

  如:

  class Test

  {

  public static void main(String args[])

  {

  byte x = 127;

  byte y = (byte)(x>>9);

  System.out.println(y);

  }

  }

  顯示:0

  如:

  char c = 'l';

  System.out.println(c>>1);

  編譯通過,把字符值轉(zhuǎn)成了int值

  5 boolean類型值true對應位值1,false對應位值0,返回仍然是boolean類型。&,|,^,都可以用于布爾值,但是~不能用于布爾值。

  布爾類型true,false可以比較,但只有==能使用,<,<=...會產(chǎn)生編譯錯誤。除此外,布爾類型不能和其他類型數(shù)值比較。

  如:

  class Test

  {

  public static void main(String args[])

  {

  boolean x = true;

  boolean y = false;

  System.out.println((x&y) + " " + (x&x));

  System.out.println((x^y) + " " + (y^y));

  System.out.println((x|y) + " " + (y|y));

  }

  }

  顯示:false ture true false false true true false

  6 位運算要求操作數(shù)為整數(shù),操作數(shù)不能是字符串也不能是小數(shù)。

  如:

  String s = "Hello";

  long l = 99;

  double d = 1.11;

  int i = 1;

  int j = 0;

  a:j = i<

  b: j = i<

  c: j = i<

  d: j = i<

  正確:b,d

  如:

  char c = 'l';

  System.out.println(c>>1);

  編譯通過,把字符值轉(zhuǎn)成了int值

  Integer i = Integer("1");

  System.out.println(i>>1);

  編譯無法通過

  7 由于位運算是二進制運算,不可與一些八進制數(shù)搞混,java中二進制無表示法。

  填寫下面表單即可預約申請免費試聽java課程!害怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可全國推薦就業(yè)!

預約申請免費聽java課程

  • 地區(qū):
  • 姓名:
  • 手機:

  如:

  System.out.println(010|4);

  顯示:12

  并且當位運算中遇見負數(shù),必須把它轉(zhuǎn)成補碼再進行計算。而不是使用原碼。

  如:

  class Test

  {

  public static void main(String args[])

  {

  try

  {

  int x = -7;

  System.out.println(x/2 + " " + (x >> 1));

  }

  catch(Exception e)

  {

  System.out.pritnln("Exception");

  }

  }

  }

  a A compiler error

  b Exception

  c -3 -3

  d -3 -4

  e -4 -4

  f None of the above

  選:f

  -7>>1:-7補碼:11111111 11111111 11111111 11111001

  隨后操作得: 11111111 11111111 11111111 11111100

  關(guān)于-7/2,其中仍與正數(shù)除法相同,為-3。

  如:

  int a = -1;

  int b = -1;

  a = a >>> 31;

  b = b >> 31;

  顯示:a=1,b=-1

  其中b處,高位插入1,是插入31個,是一32個1,這是一個補碼,隨后轉(zhuǎn)成十進制為-1。

  稍復雜的如:

  int i = 1;

  i <<= 31;

  i >>= 31;

  i >>= 1;

  int j = 1;

  j <<= 31;

  j >>= 31;

  System.out.println("i=" + i);

  System.out.println("j=" + j);

  顯示:i=-1 j=-1

  i<<=31 : 1000 0000 0000 0000 0000 0000 0000 0000 //這里已經(jīng)被當作負數(shù)了

  i>>=31 : 1111 1111 1111 1111 1111 1111 1111 1111

  i>>=1 : 1111 1111 1111 1111 1111 1111 1111 1111

  8 對于~操作,可以根據(jù)計算機中二進制正負數(shù)之間的關(guān)系,采取取負減一法,即~i = (-i)-1.

  如:

  int i = 45678;

  int j = ~i;

  System.out.println(j);

  結(jié)果:(-45678)-1 = -45679

  如:

  class Test

  {

  public static void main(String args[])

  {

  int x = 1;

  int y = ~x+1;

  System.out.println(x+" "+y);

  }

  }

  顯示:1 -1

  9 運算符優(yōu)先級和運算順序:運算順序從左至右,賦值順序從右至左。

  class Test

  {

  public static void main(String args[])

  {

  int [] refToArray = { 10, 11};

  int var = 1;

  refToArray[var-1] = var = 2;

  System.out.println(refToArray[0] + " " + refToArray[1]);

  }

  }

  如上輸出為2和11,首先計算數(shù)組下標,隨后賦值。

  運算符== 的優(yōu)先級高于賦值運算符=的優(yōu)先級。

  如:

  public class Test

  {

  public static void main(String args [])

  {

  int i = 10;

  int j = 10;

  boolean b = false;

  if(b=i==j)

  System.out.println("True");

  else

  System.out.println("False");

  }

  }

  位運算符和比較符同級別,自左向右運算即可。

  如:

  if(5&7>0 && 5|2)

  System.out.println("true")

  顯示:編譯出錯

  其中5&7最先計算,隨后計算5&7結(jié)果是否大于0。

  1:關(guān)于移位運算(<< >>)的使用

  左移《相當于乘以2

  右移》相當于除以2

  比如說,一個short類型,16位,范圍是-32768~32767

  如果是2左移一位就是2×2,結(jié)果是4;如果是右移就是2÷2,結(jié)果是1

  但是,如果是20000 ,左移一位的結(jié)果應該是40000,但是40000超出了32767,所以你得到的結(jié)果就不會是40000了!

責編:fushihao

上一篇:JAVA代碼查錯

下一篇: 沒有了

  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學歷考試
大理市| 绥棱县| 郴州市| 垦利县| 济阳县| 台前县| 徐汇区| 六盘水市| 九龙城区| 正安县| 民丰县| 离岛区| 仪征市| 临朐县| 仙居县| 株洲市| 东台市| 青铜峡市| 图木舒克市| 怀柔区| 兴隆县| 丰宁| 克山县| 蓝田县| 兴安县| 潮安县| 福鼎市| 隆尧县| 会理县| 溧阳市| 临漳县| 雷州市| 黄平县| 若尔盖县| 家居| 阳谷县| 临湘市| 渝北区| 芒康县| 紫阳县| 苗栗县|