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è)! 如: 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了!預約申請免費聽java課程
上一篇:JAVA代碼查錯
下一篇: 沒有了
初級會計職稱中級會計職稱經(jīng)濟師注冊會計師證券從業(yè)銀行從業(yè)會計實操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產(chǎn)經(jīng)紀人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產(chǎn)估價師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護士資格證初級護師主管護師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗技師臨床醫(yī)學理論中醫(yī)理論