java中平方运算符,java中的“”、“|”和“^”、“~”运算符
今天在項(xiàng)目中看到一個(gè)兩個(gè)變量互換值的寫法,感覺很奇怪,代碼是這樣的:
int a = 3;
int b = 2;
a ^= b;
b ^= a;
a ^= b;
于是到網(wǎng)上查閱了相關(guān)資料,并寫了自己的測試代碼,同時(shí)對“&”,"|","^"運(yùn)算符做了一些總結(jié):
這幾個(gè)運(yùn)算符都涉及到二進(jìn)制間的邏輯運(yùn)算,為了便于理解,在二進(jìn)制里,我們可以把1當(dāng)做邏輯true,把0當(dāng)做邏輯false。
測試代碼如下:
package test;
public class Test {
public static void main(String[] args) {
int a = 3;
int b = 2;
test1(a, b);
test2(a, b);
test3(a, b);
test4(a);
}
public static void test1(int a, int b) {
System.out.println("a & b = " + (a & b));
}
public static void test2(int a, int b) {
System.out.println("a | b = " + (a | b));
}
public static void test3(int a, int b) {
System.out.println("a ^ b = " + (a ^ b));
}
public static void test4(int a){
System.out.println("~a = " + (~a));
}
}
1、“&”按位與運(yùn)算符:
運(yùn)算規(guī)則:參與運(yùn)算的數(shù)字,低位對齊,高位不足的補(bǔ)零,對應(yīng)的二進(jìn)制位都為1,則運(yùn)算結(jié)果為1,否則為0,因?yàn)槿魏螖?shù)與0都得0。
例子中的計(jì)算過程:
3的二進(jìn)制形式為0000 0000 0000 0000 0000 0000 0000 0011
2的二進(jìn)制形式為0000 0000 0000 0000 0000 0000 0000 0010
按位進(jìn)行與運(yùn)算,結(jié)果為0000 0000 0000 0000 0000 0000 0000 0010
這個(gè)數(shù)字轉(zhuǎn)換為十進(jìn)制就是數(shù)字2.
2、“|”按位或運(yùn)算符:
運(yùn)算規(guī)則:參與運(yùn)算的數(shù)字,低位對齊,高位不足的補(bǔ)零,對應(yīng)的二進(jìn)制位有一個(gè)為1則為1,否則為0,1和任何數(shù)或運(yùn)算都是1。
例子中的計(jì)算過程:
3的二進(jìn)制形式為0000 0000 0000 0000 0000 0000 0000 0011
2的二進(jìn)制形式為0000 0000 0000 0000 0000 0000 0000 0010
按位進(jìn)行或運(yùn)算,結(jié)果為0000 0000 0000 0000 0000 0000 0000 0011
這個(gè)數(shù)字轉(zhuǎn)換為十進(jìn)制就是數(shù)字3.
3、“^”按位異或運(yùn)算符:
運(yùn)算規(guī)則:參與運(yùn)算的數(shù)字,低位對齊,高位不足的補(bǔ)零,對應(yīng)的二進(jìn)制位相同為零,不相同為1。
例子中的計(jì)算過程:3的二進(jìn)制形式為0000 0000 0000 0000 0000 0000 0000 0011
2的二進(jìn)制形式為0000 0000 0000 0000 0000 0000 0000 0010
按位進(jìn)行或運(yùn)算,結(jié)果為0000 0000 0000 0000 0000 0000 0000 0001
這個(gè)數(shù)字轉(zhuǎn)換為十進(jìn)制就是數(shù)字1.
4、“~”按位非運(yùn)算:
按位非也叫做補(bǔ),其實(shí)就是對二進(jìn)制 先取反,再取反+1并添加上符號(hào),就可以得到結(jié)果。
運(yùn)算規(guī)則:只操作一個(gè)數(shù)字,將該數(shù)字中為1的位變成0,為0的位變成1。
適用場合:反轉(zhuǎn)數(shù)字的內(nèi)容
例子中的計(jì)算過程:
3的二進(jìn)制形式為0000 0000 0000 0000 0000 0000 0000 0011????? 取反后:1111 1111 1111 1111 1111 1111 1111 1100
由于取反后得到的是一個(gè)負(fù)數(shù)的存貯形式,而負(fù)數(shù)時(shí)以補(bǔ)碼的形式存貯,所以補(bǔ)碼取反加1,轉(zhuǎn)為十進(jìn)制,再添加上符號(hào)就得到十進(jìn)制形式的值。
即:
取反加1后的結(jié)果:0000 0000 0000 0000 0000 0000 0000 0011 + 1 =? 0000 0000 0000 0000 0000 0000 0000 0100
轉(zhuǎn)為成十進(jìn)制并添加上符號(hào),即最后的結(jié)果為:-4
所以,例子程序中最后的執(zhí)行結(jié)果為:
a & b = 2
a | b = 3
a ^ b = 1
~a = -4
總結(jié)
以上是生活随笔為你收集整理的java中平方运算符,java中的“”、“|”和“^”、“~”运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英语语法第五节(定状同从句)
- 下一篇: 我们为什么要叫“鲜枣课堂”?