您好,登錄后才能下訂單哦!
Java提供了豐富的運算符,可以將之分為四種:算術(shù)運算符、位運算符、關系運算符、邏輯運算符
算術(shù)運算符的操作對象必須是數(shù)值類型,不能為boolean類型使用算術(shù)運算符,但是可以為char類型使用算術(shù)運算符。因為在Java中,char類型在本質(zhì)上是int的子集。 |運算符|含義| |:--:|:--:| |+|加法(也是一元加號)| |-|減法(也是一元減號)| ||乘法| |/|除法| |%|求模| |++|自增| |- -|自減| |+=|加并賦值| |-=|減并賦值| |=|乘并賦值| |/=|除并賦值| |%=|求模并賦值|
Java定義了幾個位運算符,可用于整數(shù)類型——long,int,short,char和byte。 |運算符|含義| |:--:|:--:| |~|按位一元取反| |&|按位與| |||按位或| |^|按位異或| |>>|右移| |>>>|右移零填充| |<<|左移| |&=|按位與并賦值| | |= |按位或并賦值| |^=|按位異或并賦值| |>>=|右移并賦值| |>>>=|右移零填充并賦值| |<<=|左移并賦值|
在Java中,所有整數(shù)類型都由寬度可變的二進制數(shù)字表示,除char類型外都是有符號整數(shù),這意味著它們即可表示正數(shù),也可以表示負數(shù)。
Java中使用“2的補碼”進行編碼,即負數(shù)的表示方法為:首先反轉(zhuǎn)數(shù)值中的所有位(1變?yōu)?,0變?yōu)?),然后再將結(jié)果加1。例如,-42的表示方法為:通過反轉(zhuǎn)42中的所有位(00101010),得到11010101,然后再加1,得到11010110,即-42。 為了解碼負數(shù),首先反轉(zhuǎn)所有位,然后加1。例如,反轉(zhuǎn)-42(11010110),得到00101001,即41,再加一則得到42。
位邏輯運算符包括&、|、^和~。
左移運算符“<<”可以將數(shù)值中的所有位向左移動指定的次數(shù),格式為:
value << num
舉個例子:
public static void main(String[] args) {
public static void main(String[] args) {
//0011 1100
byte a = 60;
// a首先被提升為int類型,即(0000 0000 0000 0000 0000 0000 0011 1100)
// 左移兩位,結(jié)果為(0000 0000 0000 0000 0000 0000 1111 0000),即240
int i = a << 2;
// 先左移兩位,結(jié)果為(0000 0000 0000 0000 0000 0011 1100 0000)
// 舍棄前三個字節(jié),得到(1100 0000),即-64
byte b = (byte) (i << 2);
System.out.println("i等于:" + i);
System.out.println("b等于:" + b);
}
}
輸出結(jié)果是:
i等于:240
b等于:-64
因為每次左移都相當于將原始值乘2,所以可以將之作為乘法的搞笑替代方法。但是如果將二進制1移進高階位,結(jié)果將會變成負數(shù)。
右移的規(guī)則與左移類似,實例代碼如下:
public static void main(String[] args) {
//0011 1100
byte a = 60;
// a首先被提升為int類型,即(0000 0000 0000 0000 0000 0000 0011 1100)
// 右移兩位,結(jié)果為(0000 0000 0000 0000 0000 0000 0000 1111),即15
int i = a >> 2;
// 先右移兩位,結(jié)果為(0000 0000 0000 0000 0000 0000 0000 0011)
// 舍棄前三個字節(jié),得到(0000 0011),即3
byte b = (byte) (i >> 2);
System.out.println("i等于:" + i);
System.out.println("b等于:" + b);
}
執(zhí)行結(jié)果
i等于:15
b等于:3
每次右移一位,相當于將該值除以2,并舍棄所有余數(shù)。可以利用這一特性實現(xiàn)高效的除法操作。
public static void main(String[] args) {
byte a=(byte) 0b11111000;
System.out.println("a等于:"+a);
int b=a>>1;
System.out.println("b等于:"+b);
}
執(zhí)行結(jié)果
a等于:-8
b等于:-4
每次移位時,“>>”運算符自動使用原來的內(nèi)容填充高階位,這個特性可以保持數(shù)值的正負性。但是,有時候?qū)δ切┓菙?shù)值的內(nèi)容進行移位操作,并不關心高階位初始值是多少,只希望用0來填充高階位,這就是無符號右移。
public static void main(String[] args) {
//二進制表示(11111111 11111111 11111111 11111111)
int a=-1;
System.out.println(a);
//右移二十四位(00000000 00000000 00000000 11111111)
a=a>>>24;
//輸出結(jié)果是 255
System.out.println(a);
}
關系運算符用于判定一個操作數(shù)與另一個操作數(shù)之間的關系。 |運算符|結(jié)果| |:--:|:--:| |==|等于| |!=|不等于| |>|大于| |<|小于| |>=|大于等于| |<=|小于等于|
關系運算符用于判定一個操作數(shù)與另一個操作數(shù)之間的關系。 |運算符|結(jié)果| |:--:|:--:| |&|邏輯與| |||邏輯或| |^|邏輯異或| ||||短路或| |&&|短路與| |!|邏輯一元非| |&=|邏輯與并賦值| ||=|邏輯或并賦值| |^=|邏輯異或并賦值| |==|等于| |!=|不等于| |?:|三元運算符|
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。