導航:首頁 > 編程語言 > java位異或運算

java位異或運算

發布時間:2023-04-25 12:28:38

java中的(或運算,異或運算,與運算)解釋下

java中或運算、異或運算、與運算的使用實例和解釋如下:

publicclassTest{publicstaticvoidmain(String[]args){
//1、左移(<<)
//然後左移2位後,低位補0:
////換算成10進制為20System.out.println(5<<2);//運行結果是20
//2、右移(>>)高位補符號位
//然後右移2位,高位補0:
//
System.out.println(5>>2);//運行結果是1
//3、無符號右移(>>>)高位補0
//例如-5換算成二進制後為:0101取反加1為1011
///
/我們分別對5進行右移3位、-5進行右移3位和無符號右移3位:
System.out.println(5>>3);//結果是0
System.out.println(-5>>3);//結果是-1
System.out.println(-5>>>3);//結果是536870911
//4、位與(&)
//位與:第一個操作數的的第n位於第二個操作數的第n位如果都是1,那麼結果的第n為也為1,否則為0
System.out.println(5&3);//結果為1
System.out.println(4&1);//結果為0
//5、位或(|)
//第一個操作數的的第n位於第二個操作數的第n位只要有一個是1,那麼結果的第n為也為1,否則為0
System.out.println(5|3);//結果為7
//6、位異或(^)
//第一個操作數的的第n位於第二個操作數的第n位相反,那麼結果的第n為也為1,否則為0
System.out.println(5^3);//結果為6
//7、位非(~)//操作數的第n位為1,那麼結果的第n位為0,反之。System.out.println(~5);//結果為-6}}

㈡ java中異或是怎樣算的

概述

i = 14,異或演算法轉換二進制,同則取0異則取1;

解析

異或是一種基於二進制的位運算,用符號XOR或者^表示,其運演算法則是對運算符兩側數的每一個進制位同值則取0,異值則取1.

簡單理解就是不進位加法,如1+1=0,0+0=0,1+0=1.

For example:

3^5 = 6

轉成二進制後就是 0011 ^ 0101 二號位和三號位都是異值取1 末尾兩個1同值取零,所以3^5 = 0110 = 6

而 i = 50 ,j = 60;

所以:

i 的二進制 = 00110010

j 的二進制 = 00111100

同位相同取0,不同取1所以得出來的值為00001110

i = i ^ j;所以i = 00001110 = 14


拓展內容

異或運算符

性質

1、交換律
2、結合律(即(a^b)^c == a^(b^c))
3、對於任何數x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A

異或運算最常見於多項式除法,不過它最重要的性質還是自反性:A XOR B XOR B = A,即對給定的數A,用同樣的運算因子(B)作兩次異或運算後仍得到A本身。這是一個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,所有的程序教科書都會向初學者指出,要交換兩個變數的值,必須要引入一個中間變數。但如果使用異或,就可以節約一個變數的存儲空間: 設有A,B兩個變數,存儲的值分別為a,b,則以下三行表達式將互換他們的值 表達式 (值) :
A=A XOR B (a XOR b)
B=B XOR A (b XOR a XOR b = a)
A=A XOR B (a XOR b XOR a = b)

#code:

㈢ 在javaSE中位運算符^(按位異或)的特點是什麼

按位異或概念不是JAVA的,而是計算機原理的,它最早是用於匯編,JAVA的^只是異或運算在JAVA的實現而已(C/C++也是用^表示按位異或的)
個人觀點,按位異或運算的最大特點是可逆的,如
A=B^C,那麼C==A^B,B==A^C
而其它按位的運算如 +-*/|&都是不可逆的

㈣ JAVA 中的 -> 是什麼意思

本文主要是講解 Java 中的運算符。對於運算符而言是編程參與計算的基礎核心內容。最基礎的加減乘除取余。到後面的邏輯運算大於小於等於不等於。



本文內容思維導圖



先從最簡單的算術運算符說起。



算術運算符



算術運算符又分為: 一元運算符和二元運算符, 並且在 Java 中包含三元運算符, 就是條件運算符或者叫作三目運算符只是名字不同,含義相同。



一元運算符



一元運算符只有一個變數就可以進行操作。常用的一元運算符就是自加,自減。一共四個一元運算符。



示例代碼, 這里使用 JShell 快速查看結果。



需要注意其中的自加和自減的規則。當運算符在前的時候 ++ a; 運算符的優先順序比較高, 所以會先處理這個代碼, 所以可以看到代碼裡面直接返回了結果 4。但是 a ++ 的時候卻沒有直接返回結果, 因為他的運算符比價低。 所以重新調用該變數就會列印出來當前的值。



代碼定義如下:



運行查看結果:



二元運算符



二元運算符一共5個。分辨是加減乘除取余(+、-、*、/、%)。



其中,在進行除法運算的時候,遵守除數不能為 0;



如果除數為 0 就會報錯, 錯誤如下:



代碼示例如下:



運行查看結果,編譯, 運行:



賦值運算符



對於賦值運算符基本上貫穿了整個類的周期。常用的 = 賦值。 和簡寫賦值和算術運算符的使用方式。賦值運算符有如下圖所示的使用方式。



使用 JShell 進行測試代碼如下:



代碼示例如下:



inta=0;
a=3;
System.out.println(a);// 3
a+=3;
System.out.println(a);// 6
a-=3;
System.out.println(a);// 3
a*=3;
System.out.println(a);// 9
a/=3;
System.out.println(a);// 3
a%=2;
System.out.println(a);// 1



比較運算符



比較運算符, 也可以說是布爾運算符。 主要是比較兩個表達式的結果。 (表達式) 操作符 (表達式)



根據上面的運算符進行案例演示, 一定要動手練習。 更能加深印象。



只要知道比較運算是最終得到一個布爾類型的值。並且在進行比較運算的時候, 一定要注意其優先順序。代碼這次自己動手做吧。 有上面的演示, 應該很容易就搞定。



邏輯運算符



對於邏輯運算符, 主要就是 3 個。 邏輯與、邏輯或、邏輯非。和數學中的與或非意思一致。



格式: 表達式1 邏輯運算符 表達式2



邏輯運算符大多數情況下會和其他的運算符一起使用, 主要做一些簡單或復雜的邏輯運算。 並且通常都是和 if, for 等邏輯表達式一起使用。



簡單的說一說, 對於邏輯與和邏輯或不同點。 邏輯與為第一個表達式和第二個表達式都等於真值的情況下才會表達式成立。 邏輯或是第一個表達式為真值的情況下, 就不會在執行第二個表達式。 因為不管第二個表達式是否成立, 該邏輯運算都是真值了。



位運算符



對於任何編程語言而言, 最終的操作都是二進製表示, 因為計算機只認識二進制, 而八進制,十進制或者十六進制都是為了讓開發人員方便開發。對於 Java 來說, 也可以針對數的某個值進行運算。這就需要位運算符的參與了。也是為了方便對二進制進行操作。



位運算符主要有一下運算符:



位與 &



按位與和邏輯運算符的邏輯與很類似,一個比較的表達式, 一個是按照位來進行判斷。在二進制中, 位與的判斷為都為 1 的記做 1 否則記做 0。



按位與規則如下:



0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;



先看一個都是正整數的值 10 & 2。



最終得出結果 0000 1010 & 0000 0010 = 0000 0010 轉換成十進制就是2。



對於負值的位與運算有點區別的地方就是參與運算的是補碼。



舉例說明: 10 & -2



具體如何得到補碼, 可以參考我之前寫的文章基礎類型的相互轉換。這里對於負值的情況需要了解什麼是原碼,反碼和補碼。參與運算的是補碼。-2 的原碼是 1000 0010 反碼是 1111 1101 補碼 在反碼的基礎最後一位加 1 得到1111 1110。



最終結果得到 0000 1010 & 1111 1110 = 0000 1010 十進制也就是 10。



這個時候怎麼校驗結果是否正確呢? 直接寫 Java 代碼就好了, 打開 jshell:



位或 |



按位或, 和邏輯或很類似, 只要二者有一位 1 結果就是 1。



按位或規則如下:



0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;



根據上面的運算得到了 10 | 2 = 10。



負值有略有不同。



還是要靈活運用原碼反碼和補碼,特別是負數的情況下, 因為正數的原碼和補碼一致。



位反 ~



按位反, 和邏輯非類似。 是對位進行直接取反。



按位反規則如下:



~1 = 0;
~0 = 1;



先用 2 進行運算處理:



在進行 -2 的運算操作



-2 的原碼 需要轉換成補碼, 用補碼進行取反運算。 得到 1 的二進制。



代碼演示如下:



位異或 ^



位異或是基於二進制的位運算。 採用符號 XOR 在 Java 中使用 ^ 進行表示。兩個值相同取 0, 不同的取 1。



按位異或規則如下:



1 ^ 1 = 0;
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;



舉例 10 ^ 2



舉例 10 ^ -2



代碼演示結果的准確性:



異或在代碼優化和實際的工作中會經常用到。 後續實戰中用到了在詳細分析用法, 現在知道進行異或運算即可。



位左移 <<



將一個操作數進行二進制位往左移, 移動後空出來的低位用 0 進行填充。移除的高位捨去。高位丟棄,低位補零。



操作數 << 移動的位數



舉例說明 10 << 2



位左移代碼演示:



位右移 >>



將一個操作數進行二進制往右移, 移動後,有兩種情況,一種有無符號一種是有符號。也就是最高位為 0 移動後高位補 0, 如果最高位(符號位)為 1, 移動後空缺位都為 1.



操作數 >> 移動的位數



舉例說明 10 >> 2



對於負數舉例 -2 >> 2 空缺位補 1:



位右移代碼演示:



注意這兩者的區別。



無符號位右移 >>>



這個是和右移操作上是一致的, 但是不管是否最高位(符號位)為 1, 空缺位都使用 0 進行補齊。



操作數 >>> 移動的位數



舉例說明 10 >>> 2



對於負數來說。 這里有點區別, 因為對於負值來說, 上面其實都是 32 位, 為了讓大家看起來舒服轉換成了對應的 8 位的。 因為無符號位右移會改變正負值, 所以 32 位的負值和 8 位的負值是不一致的。



並且 Java 在處理 byte, short , char 等值進行移位操作前, 會先將類型轉換成 int 因為 int 佔用 32 位。



所以 -2 >>> 2 的時候,8 位運算應該是如下:



因為會先轉換成 32 位。 所以 32 位的 -2 等於如下:



也就是結果: 1073741823



無符號位右移代碼如下:



理解原理。 更能發現問題。



類型比較運算符



這里說的類型比較是對象的比較。 判斷每個定義的變數是否是某個類。該類可以是(介面、抽象類)。



語法規則:



boolean = 變數 instanceof 類



舉例說明:



運行查看結果:



這里需要注意:



㈤ java中的位運運算元及其用法。

java中的位運運算元及其用法。

位邏輯運運算元有「與」(AND)、「或」(OR)、「異或(XOR)」、「非(NOT)」,分別用「&」、「|」、「^」、「~」表示。
下面的例子說明了位邏輯運運算元:
Demonstrate the biise logical operators.
class BitLogic {
public static void main(String args[]) {
String binary[] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
};
int a = 3; 0 + 2 + 1 or 0011 in binary
int b = 6; 4 + 2 + 0 or 0110 in binary
int c = a | b;
int d = a & b;
int e = a ^ b;
int f = (~a & b) | (a & ~b);
int g = ~a & 0x0f;
System.out.println(" a = " + binary[a]);
System.out.println(" b = " + binary[b]);
System.out.println(" a|b = " + binary[c]);
System.out.println(" a&b = " + binary[d]);
System.out.println(" a^b = " + binary[e]);
System.out.println("~a&b|a&~b = " + binary[f]);
System.out.println(" ~a = " + binary[g]);
}
}
在本例中,變數a與b對應位的組合代表了二進位制數所有的 4 種組合模式:0-0,0-1,1-0,和1-1。「|」運運算元和「&」運運算元分別對變數a與b各個對應位的運算得到了變數c和變數d的值。對變數e和f的賦值說明了「^」運運算元的功能。字串陣列binary代表了0到15對應的二進位制的值。在本例中,陣列各元素的排列順序顯示了變數對應值的二進位製程式碼。陣列之所以這樣構造是因為變數的值n對應的二進位製程式碼可以被正確的儲存在陣列對應元素binary[n]中。例如變數a的值為3,則它的二進位製程式碼對應地儲存在陣列元素binary[3]中。~a的值與數字0x0f (對應二進位制為0000 1111)進行按位與運算的目的是減小~a的值,保證變數g的結果小於16。因此該程式的執行結果可以用陣列binary對應的元素來表示。該程式的輸出如下:
a = 0011
b = 0110
a|b = 0111
a&b = 0010
a^b = 0101
~a&b|a&~b = 0101
~a = 1100
左移運運算元
左移運運算元<<使指定值的所有位都左移規定的次數。它的通用格式如下所示:
value << num
這里,num指定要移位值value移動的位數。也就是,左移運運算元<<使指定值的所有位都左移num位。每左移一個位,高階位都被移出(並且丟棄),並用0填充右邊。這意味著當左移的運算數是int型別時,每移動1位它的第31位就要被移出並且丟棄;當左移的運算數是long型別時,每移動1位它的第63位就要被移出並且丟棄。
在對byte和short型別的值進行移位運算時,你必須小心。因為你知道Java在對表達式求值時,將自動把這些型別擴大為 int型,而且,表示式的值也是int型 。對byte和short型別的值進行移位運算的結果是int型,而且如果左移不超過31位,原來對應各位的值也不會丟棄。但是,如果你對一個負的byte或者short型別的值進行移位運算,它被擴大為int型後,它的符號也被擴充套件。這樣,整數值結果的高位就會被1填充。因此,為了得到正確的結果,你就要舍棄得到結果的高位。這樣做的最簡單辦法是將結果轉換為byte型。下面的程式說明了這一點:
Left shifting a byte value.
class ByteShift {
public static void main(String args[]) {
byte a = 64, b;
int i;
i = a << 2;
b = (byte) (a << 2);
System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}
該程式產生的輸出下所示:
Original value of a: 64
i and b: 256 0
因變數a在賦值表示式中,故被擴大為int型,64(0100 0000)被左移兩次生成值256(10000 0000)被賦給變數i。然而,經過左移後,變數b中惟一的1被移出,低位全部成了0,因此b的值也變成了0。
既然每次左移都可以使原來的運算元翻倍,程式設計師們經常使用這個辦法來進行快速的2的乘法。但是你要小心,如果你將1移進高階位(31或63位),那麼該值將變為負值。下面的程式說明了這一點:
Left shifting as a quick way to multiply by 2.
class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i++) {
num = num << 1;
System.out.println(num);
}
}
}
該程式的輸出如下所示:
536870908
1073741816
2147483632
-32
初值經過仔細選擇,以便在左移 4 位後,它會產生-32。正如你看到的,當1被移進31位時,數字被解釋為負值。
右移運運算元
右移運運算元>>使指定值的所有位都右移規定的次數。它的通用格式如下所示:
value >> num
這里,num指定要移位值value移動的位數。也就是,右移運運算元>>使指定值的所有位都右移num位。
下面的程式片段將值32右移2次,將結果8賦給變數a:
int a = 32;
a = a >> 2; a now contains 8
當值中的某些位被「移出」時,這些位的值將丟棄。例如,下面的程式片段將35右移2次,它的2個低位被移出丟棄,也將結果8賦給變數a:
int a = 35;
a = a >> 2; a still contains 8
用二進位製表示該過程可以更清楚地看到程式的執行過程:
00100011 35
>> 2
00001000 8
將值每右移一次,就相當於將該值除以2並且舍棄了余數。你可以利用這個特點將一個整數進行快速的2的除法。當然,你一定要確保你不會將該數原有的任何一位移出。
右移時,被移走的最高位(最左邊的位)由原來最高位的數字補充。例如,如果要移走的值為負數,每一次右移都在左邊補1,如果要移走的值為正數,每一次右移都在左邊補0,這叫做符號位擴充套件(保留符號位)(sign extension),在進行右移操作時用來保持負數的符號。例如,–8 >> 1 是–4,用二進位製表示如下:
11111000 –8
>>1
11111100 –4
一個要注意的有趣問題是,由於符號位擴充套件(保留符號位)每次都會在高位補1,因此-1右移的結果總是–1。有時你不希望在右移時保留符號。例如,下面的例子將一個byte型的值轉換為用十六進位製表示。注意右移後的值與0x0f進行按位與運算,這樣可以舍棄任何的符號位擴充套件,以便得到的值可以作為定義陣列的下標,從而得到對應陣列元素代表的十六進位制字元。
Masking sign extension.
class HexByte {
static public void main(String args[]) {
char hex[] = {
Ɔ', Ƈ', ƈ', Ɖ', Ɗ', Ƌ', ƌ', ƍ',
Ǝ', Ə', 'a', 'b', 'c', 'd', 'e', 'f''
};
byte b = (byte) 0xf1;
System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);
}
}
該程式的輸出如下:
b = 0xf1
無符號右移
正如上面剛剛看到的,每一次右移,>>運運算元總是自動地用它的先前最高位的內容補它的最高位。這樣做保留了原值的符號。但有時這並不是我們想要的。例如,如果你進行移位操作的運算數不是數字值,你就不希望進行符號位擴充套件(保留符號位)。當你處理畫素值或圖形時,這種情況是相當普遍的。在這種情況下,不管運算數的初值是什麼,你希望移位後總是在高位(最左邊)補0。這就是人們所說的無符號移動(unsigned shift)。這時你可以使用Java的無符號右移運運算元>>>,它總是在左邊補0。下面的程式段說明了無符號右移運運算元>>>。在本例中,變數a被賦值為-1,用二進位製表示就是32位全是1。這個值然後被無符號右移24位,當然它忽略了符號位擴充套件,在它的左邊總是補0。這樣得到的值255被賦給變數a。
int a = -1;
a = a >>> 24;
下面用二進位制形式進一步說明該操作:
11111111 11111111 11111111 11111111 int型- 1的二進位製程式碼
>>> 24 無符號右移24位
00000000 00000000 00000000 11111111 int型255的二進位製程式碼由於無符號右移運運算元>>>只是對32位和64位的值有意義,所以它並不像你想像的那樣有用。因為你要記住,在表示式中過小的值總是被自動擴大為int型。這意味著符號位擴充套件和移動總是發生在32位而不是8位或16位。這樣,對第7位以0開始的byte型的值進行無符號移動是不可能的,因為在實際移動運算時,是對擴大後的32位值進行操作。下面的例子說明了這一點:
Unsigned shifting a byte value.
class ByteUShift {
static public void main(String args[]) {
char hex[] = {
Ɔ', Ƈ', ƈ', Ɖ', Ɗ', Ƌ', ƌ', ƍ',
Ǝ', Ə', 'a', 'b', 'c', 'd', 'e', 'f'
};
byte b = (byte) 0xf1;
byte c = (byte) (b >> 4);
byte d = (byte) (b >>> 4);
byte e = (byte) ((b & 0xff) >> 4);
System.out.println(" b = 0x"
+ hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);
System.out.println(" b >> 4 = 0x"
+ hex[(c >> 4) & 0x0f] + hex[c & 0x0f]);
System.out.println(" b >>> 4 = 0x"
+ hex[(d >> 4) & 0x0f] + hex[d & 0x0f]);
System.out.println("( b & 0xff) >> 4 = 0x"
+ hex[(e >> 4) & 0x0f] + hex[e & 0x0f]);
}
}
該程式的輸出顯示了無符號右移運運算元>>>對byte型值處理時,實際上不是對byte型值直接操作,而是將其擴大到int型後再處理。在本例中變數b被賦為任意的負byte型值。對變數b右移4位後轉換為byte型,將得到的值賦給變數c,因為有符號位擴充套件,所以該值為0xff。對變數b進行無符號右移4位操作後轉換為byte型,將得到的值賦給變數d,你可能期望該值是0x0f,但實際上它是0xff,因為在移動之前變數b就被擴充套件為int型,已經有符號擴充套件位。最後一個表示式將變數b的值通過按位與運算將其變為8位,然後右移4位,然後將得到的值賦給變數e,這次得到了預想的結果0x0f。由於對變數d(它的值已經是0xff)進行按位與運算後的符號位的狀態已經明了,所以注意,對變數d再沒有進行無符號右移運算。
B = 0xf1
b >> 4 = 0xff
b >>> 4 = 0xff
(b & 0xff) >> 4 = 0x0f
位運運算元賦值
所有的二進位制位運運算元都有一種將賦值與位運算組合在一起的簡寫形式。例如,下面兩個語句都是將變數a右移4位後賦給a:
a = a >> 4;
a >>= 4;
同樣,下面兩個語句都是將表示式a OR b運算後的結果賦給a:
a = a | b;
a |= b;
下面的程式定義了幾個int型變數,然後運用位賦值簡寫的形式將運算後的值賦給相應的變數:
class OpBitEquals {
public static void main(String args[]) {
int a = 1;
int b = 2;
int c = 3;
a |= 4;
b >>= 1;
c <<= 1;
a ^= c;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
該程式的輸出如下所示:
a = 3
b = 1
c = 6

java中的按位運運算元


0&&0 =0
1&&0 =0
0&&1 =0
1&&1 =1

0||0 =0
1||0 =1
0||1 =1
1||1 =1
異或是
1^0=1
0^1=1
0^0=0
1^1=0
例子
11001010 與
00011011
按位與 按位或 按位異或
00001010 11011011 11010001

什麼是Java的位運運算元?

位運運算元用來對二進位制位進行操作,位 運 算 符 (>>,<<,>>>,&,|,^,~ ) ,位運 算 符 中 ,除 ~ 以 外 ,其餘 均 為 二 元 運 算 符 。 操 作 數 只 能 為 整 型 和字 符 型 數 據 。
比如『>>』 這個就相當於乘以2.

c++中的位運運算元號

C++位運運算元有以下兩類:
1 位邏輯運運算元:&(位「與」)、^(位「異或」)、|(位「或」)和~(位「取反」)
2 移位運運算元:<<(左移)和>>(右移).
位「與」、位「或」和位「異或」運運算元都是雙目運運算元,其結合性都是從左向右的,優先順序高於邏輯運運算元,低於比較運運算元,且從高到低依次為&、^、|

c++中按位運運算元的用法

這個是C++中的基礎,你可以看看人家的部落格。
:m.blog.csdn./article/details?id=52196039

java中位運運算元詳解

運運算元那多了去了
算術運運算元 + - * / % 分別是加減乘除求余
在這里要特別注意有個晉升現象.是指低於int的三種類型(byte short char)進行算術運算後會自動提升成int型別列如
byte a=20;
byte b=30;
byte c=a+b;這就錯了應該寫成byte c=(byte)(a+b);或者 int c =a+b;
比較運運算元
即< ,> ,<=, >= ,==, !=分別是小於, 大於, 小於等於,大於等於,不等於
它的結果是一個Boolean 型別
邏輯運運算元
或(||) 與(&&) 非(!) or and not
賦值運運算元
最簡單的是"="用來為常量或者變數指定值注意不能為運算式賦值
還有其他賦值運運算元如下
+= 加等 把變數加上右側的值然後再賦值給自身
-= 減等 把變數減去右側的值然後再賦值給自身
*= 乘等 把變數乘以右側的值然後再賦值給自身
/= 除等 把變數除以右側的值然後再賦值給自身
%= 取余等 把變數和右側的值取余然後再賦值給自身
還有二進位制運運算元
位運運算元
移位運運算元....
++ 遞增
-- 遞減
條件?值1:值2 條件運運算元

java中的邏輯符號,運運算元(位運運算元)個代表什麼

算數運運算元,+-*/(+=,-=,*=,、/*) p.s. 1/0 => NaN 無窮大。邏輯運運算元,略轉義序列符(例舉), 退格, 製表, 換行(制圖、一般println), 回車, " 雙引號, ' 單引號p.s. 取決於os,並不常用。遞增/減 ++, --賦值 =比較 >=,<=, ==位移 <<,>>, >>>p.s. 圖形用到注釋, 行注釋,/* */段注釋型別轉換, a = (int)b; 括弧。條件, if()... == a ? true : false 三目運算。正則表示式, 應用類,用到這再說。
LZ是學Java的新手吧。嗯,慢慢學

java都有哪些運運算元及其用法

Java的運運算元可分為4類:算術運運算元、關系運算符、邏輯運運算元和位運運算元。
1.算術運運算元
Java的算術運運算元分為一元運運算元和二元運運算元。一元運運算元只有一個運算元;二元運運算元有兩個運算元,運運算元位於兩個運算元之間。算術運運算元的運算元必須是數值型別。
(1)一元運運算元:
一元運運算元有:正(+)、負(-)、加1(++)和減1(--)4個。
加1、減1運運算元只允許用於數值型別的變數,不允許用於表示式中。加1、減1運運算元既可放在變數之前(如++i),也可放在變數之後(如i++),兩者的差別是:如果放在變數之前(如++i),則變數值先加1或減1,然後進行其他相應的操作(主要是賦值操作);如果放在變數之後(如i++),則先進行其他相應的操作,然後再進行變數值加1或減1。
例如:
int i=6,j,k,m,n;
j = +i; 取原值,即j=6
k = -i; 取負值,即k=-6
m = i++; 先m=i,再i=i+1,即m=6,i=7
m = ++i; 先i=i+1,再m=i,即i=7,m=7
n = j--; 先n=j,再j=j-1,即n=6,j=5
n = --j; 先j=j-1,再n=j,即j=5,n=5
在書寫時還要注意的是:一元運運算元與其前後的運算元之間不允許有空格,否則編譯時會出錯。
(2)二元運運算元
二元運運算元有:加(+)、減(-)、乘(*)、除(/)、取余(%)。其中+、-、*、/完成加、減、乘、除四則運算,%是求兩個運算元相除後的余數。
%求余操作舉例:
a % b = a - (a / b) * b
取余運運算元既可用於兩個運算元都是整數的情況,也可用於兩個運算元都是浮點數(或一個運算元是浮點數)的情況。當兩個運算元都是浮點數時,例如7.6 % 2.9時,計算結果為:7.6 - 2 * 2.9 = 1.8。
當兩個運算元都是int型別數時,a%b的計算公式為:
a % b = a - (int)(a / b) * b
當兩個運算元都是long型別(或其他整數型別)數時,a%b的計算公式可以類推。
當參加二元運算的兩個運算元的資料型別不同時,所得結果的資料型別與精度較高(或位數更長)的那種資料型別一致。

例如:
7 / 3 整除,運算結果為2
7.0 / 3 除法,運算結果為2.33333,即結果與精度較高的型別一致
7 % 3 取余,運算結果為1
7.0 % 3 取余,運算結果為1.0
-7 % 3 取余,運算結果為-1,即運算結果的符號與左運算元相同
7 % -3 取余,運算結果為1,即運算結果的符號與左運算元相同
2.關系運算符
關系運算符用於比較兩個數值之間的大小,其運算結果為一個邏輯型別的數值。關系運算符有六個:等於(==)、不等於(!=)、大於(>)、大於等於(>=)、小於(<)、小於等於(<=)。

例如:
9 <= 8 運算結果為false
9.9 >= 8.8 運算結果為true
'A' < 'a' 運算結果為true,因字元'A'的Unicode編碼值小於字元'a'的
要說明的是,對於大於等於(或小於等於)關系運算符來說,只有大於和等於兩種關系運算都不成立時其結果值才為false,只要有一種(大於或等於)關系運算成立其結果值即為true。例如,對於9 <= 8,9既不小於8也不等於8,所以9 <= 8 的運算結果為false。對於9 >= 9,因9等於9,所以9 >= 9的運算結果為true。
3.邏輯運運算元
邏輯運運算元要求運算元的資料型別為邏輯型,其運算結果也是邏輯型值。邏輯運運算元有:邏輯與(&&)、邏輯或(||)、邏輯非(!)、邏輯異或(^)、邏輯與(&)、邏輯或(|)。
真值表是表示邏輯運算功能的一種直觀方法,其具體方法是把邏輯運算的所有可能值用表格形式全部羅列出來。Java語言邏輯運運算元的真值表如下:
邏輯運運算元的真值表
A B A&&B A||B !A A^B A&B A|B
false false false false true false false false
true false false true false true false true
false true false true true true false true
true true true true false false true true
前兩列是參與邏輯運算的兩個邏輯變數,共有4種可能,所以表2.5共有4行。後6列分別是6個邏輯運運算元在邏輯變數A和邏輯變數B取不同數值時的運算結果值。
要說明的是,兩種邏輯與(&&和&)的運算規則基本相同,兩種邏輯或(||和|)的運算規則也基本相同。其區別是:&和|運算是把邏輯表示式全部計算完,而&&和||運算具有短路計算功能。所謂短路計算,是指系統從左至右進行邏輯表示式的計算,一旦出現計算結果已經確定的情況,則計算過程即被終止。對於&&運算來說,只要運運算元左端的值為false,則因無論運運算元右端的值為true或為false,其最終結果都為false。所以,系統一旦判斷出&&運運算元左端的值為false,則系統將終止其後的計算過程;對於 || 運算來說,只要運運算元左端的值為true,則因無論運運算元右端的值為true或為false,其最終結果都為true。所以,系統一旦判斷出|| 運運算元左端的值為true,則系統將終止其後的計算過程。

例如,有如下邏輯表示式:
(i>=1) && (i<=100)
此時,若i等於0,則系統判斷出i>=1的計算結果為false後,系統馬上得出該邏輯表示式的最終計算結果為false,因此,系統不繼續判斷i<=100的值。短路計算功能可以提高程式的執行速度。
作者建議讀者:在程式設計時使用&&和||運運算元,不使用&和|運運算元。
用邏輯與(&&)、邏輯或(||)和邏輯非(!)可以組合出各種可能的邏輯表示式。邏輯表示式主要用在 if、while等語句的條件組合上。
例如:
int i = 1;
while(i>=1) && (i<=100) i++; 迴圈過程
上述程式段的迴圈過程將i++語句迴圈執行100次。
4.位運運算元
位運算是以二進位制位為單位進行的運算,其運算元和運算結果都是整型值。
位運運算元共有7個,分別是:位與(&)、位或(|)、位非(~)、位異或(^)、右移(>>)、左移(<<)、0填充的右移(>>>)。
位運算的位與(&)、位或(|)、位非(~)、位異或(^)與邏輯運算的相應操作的真值表完全相同,其差別只是位運算操作的運算元和運算結果都是二進位制整數,而邏輯運算相應操作的運算元和運算結果都是邏輯值。

位運算示例
運運算元 名稱 示例 說明
& 位與 x&y 把x和y按位求與
| 位或 x|y 把x和y按位求或
~ 位非 ~x 把x按位求非
^ 位異或 x^y 把x和y按位求異或
>> 右移 x>>y 把x的各位右移y位
<< 左移 x<<y 把x的各位左移y位
>>> 右移 x>>>y 把x的各位右移y位,左邊填0
舉例說明:
(1)有如下程式段:
int x = 64; x等於二進位制數的01000000
int y = 70; y等於二進位制數的01000110
int z = x&y z等於二進位制數的01000000
即運算結果為z等於二進位制數01000000。位或、位非、位異或的運算方法類同。
(2)右移是將一個二進位制數按指定移動的位數向右移位,移掉的被丟棄,左邊移進的部分或者補0(當該數為正時),或者補1(當該數為負時)。這是因為整數在機器內部採用補碼表示法,正數的符號位為0,負數的符號位為1。例如,對於如下程式段:
int x = 70; x等於二進位制數的01000110
int y = 2;
int z = x>>y z等於二進位制數的00010001
即運算結果為z等於二進位制數00010001,即z等於十進位制數17。
對於如下程式段:
int x = -70; x等於二進位制數的11000110
int y = 2;
int z = x>>y z等於二進位制數的11101110
即運算結果為z等於二進位制數11101110,即z等於十進位制數-18。要透徹理解右移和左移操作,讀者需要掌握整數機器數的補碼表示法。
(3)0填充的右移(>>>)是不論被移動數是正數還是負數,左邊移進的部分一律補0。
5.其他運運算元
(1)賦值運運算元與其他運運算元的簡捷使用方式
賦值運運算元可以與二元算術運運算元、邏輯運運算元和位運運算元組合成簡捷運運算元,從而可以簡化一些常用表示式的書寫。
賦值運運算元與其他運運算元的簡捷使用方式
運運算元 用法 等價於 說明
+= s+=i s=s+i s,i是數值型
-= s-=i s=s-i s,i是數值型
*= s*=i s=s*i s,i是數值型
/= s/=i s=s/i s,i是數值型
%= s%=i s=s%i s,i是數值型
&= a&=b a=a&b a,b是邏輯型或整型
|= a|=b a=a|b a,b是邏輯型或整型
^= A^=b a=a^b a,b是邏輯型或整型
<<= s<<=i s=s<<i s,i是整型
>>= s>>=i s=s>>i s,i是整型
>>>= s>>>=i s=s>>>i s,i是整型
(2)方括弧[]和圓括弧()運運算元
方括弧[]是陣列運運算元,方括弧[]中的數值是陣列的下標,整個表示式就代表陣列中該下標所在位置的元素值。
圓括弧()運運算元用於改變表示式中運運算元的優先順序。
(3)字串加(+)運運算元
當運算元是字串時,加(+)運運算元用來合並兩個字串;當加(+)運運算元的一邊是字串,另一邊是數值時,機器將自動將數值轉換為字串,這種情況在輸出語句中很常見。如對於如下程式段:
int max = 100;
System.out.println("max = "+max);
計算機螢幕的輸出結果為:max = 100,即此時是把變數max中的整數值100轉換成字串100輸出的。
(4)條件運運算元(?:)
條件運運算元(?:)的語法形式為:
<表示式1> ?<表示式2> : <表示式3>
條件運運算元的運算方法是:先計算<表示式1>的值,當<表示式1>的值為true時,則將<表示式2>的值作為整個表示式的值;當<表示式1>的值為false時,則將<表示式3>的值作為整個表示式的值。如:
int a=1,b=2,max;
max = a>b?a:b; max等於2
(5)強制型別轉換符
強制型別轉換符能將一個表示式的型別強制轉換為某一指定資料型別,其語法形式為:
(<型別>)<表示式>
(6)物件運運算元instanceof
物件運運算元instanceof用來測試一個指定物件是否是指定類(或它的子類)的例項,若是則返回true,否則返回false。
(7)點運運算元
點運運算元「.」的功能有兩個:一是引用類中成員,二是指示包的層次等級。

6.運運算元的優先順序
以下按優先順序從高到低的次序列出Java語言中的所有運運算元,表中結合性一列中的「左右」表示其運算次序為從左向右,「右左」表示其運算次序為從右向左。
優先順序 運運算元 結合性
1 . [] () ; ,
2 ++ ―― += ! ~ +(一元) -(一元) 右左
3 * / % 左右
4 +(二元) -(二元) 左右
5 << >> >>> 左右
6 < > <= >= instanceof 左右
7 = = != 左右
8 & 左右
9 ^ 左右
10 | 左右
11 && 左右
12 || 左右
13 ?: 右左
14 = *= /= %= += -= <<= >>= >>>= &= ^= |= 右左
--感謝原作者。

如何理解vba中邏輯運運算元的位運運算元

位運運算元並不是邏輯運運算元,邏輯運運算元包括或、與、非、異或。

㈥ java中按位異或與邏輯異或的區別

邏輯沒有異或運算。

位異或指:異或運算^,異或運算它都是以二進制數據為基礎進行運算,1^1=00^0=11^0=10^1=1

㈦ java中異或是怎樣算的

異或運算(^)都以二進制數據為基礎進行的運算。也就是說當代碼中使用到異或運算時,都會先將兩個條件進行轉換,轉換成二進制數據後,再進行運算。異域中同位如果值相同(都是0或者都是1)則為0,不同(一個是0,一個是1)為1。
例如
int a=4;
int b=6;
int c = a^b;//c的值是a和b的異或。值為2.過程
1、a的值二進制是
0000 0100 //這里去低8位,因為高位都一致。 2、b的值二進制是
0000 0110 3、異或後
0000 0010 //結果是2

閱讀全文

與java位異或運算相關的資料

熱點內容
歐姆龍plc編程第36講 瀏覽:907
我的世界如何將一個伺服器弄崩 瀏覽:6
php網站訪問量代碼 瀏覽:431
怠速壓縮機咔咔響 瀏覽:176
怎麼才能修改APP中的數據 瀏覽:688
哪裡有搶單的app 瀏覽:462
演算法概率題 瀏覽:465
長方形拉伸的命令 瀏覽:279
python代碼函數編程技術 瀏覽:194
java正則式 瀏覽:429
外包程序員好進嗎 瀏覽:384
雲伺服器服務模型架構 瀏覽:901
刪文件夾什麼指令 瀏覽:509
極速抖音已加密怎麼辦 瀏覽:603
matlab拉格朗日演算法框圖 瀏覽:430
華為公司計算機視覺演算法顧問 瀏覽:254
夏老師講的單片機 瀏覽:298
在編程中如何將圖片放大 瀏覽:163
appstore怎麼看是否付費 瀏覽:603
程序員和碩士 瀏覽:951