異或是一個數(shù)學(xué)運算符,它應(yīng)用于邏輯運算。那么你對異或運算了解多少呢?以下是由我整理關(guān)于什么是異或運算的內(nèi)容,希望大家喜歡!
專注于為中小企業(yè)提供網(wǎng)站設(shè)計、網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)海陵免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
異或運算的概念
異或,英文為exclusive OR,或縮寫成xor
異或的數(shù)學(xué)符號為“⊕”,計算機符號為“xor”。其運算法則為:
a⊕b = (?a ∧ b) ∨ (a ∧?b)
如果a、b兩個值不相同,則異或結(jié)果為1。如果a、b兩個值相同,異或結(jié)果為0。
異或也叫半加運算,其運算法則相當于不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位。
異或略稱為XOR、EOR、EX-OR
程序中有三種演算子:XOR、xor、⊕。
使用 方法 如下
z = x ⊕ y
z = x xor y
異或運算的運算法則
1. a ⊕ a = 0
2. a ⊕ b = b ⊕ a
3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
5. a ⊕ b ⊕ a = b.
6.若x是二進制數(shù)0101,y是二進制數(shù)1011
則x⊕y=1110
只有在兩個比較的位不同時其結(jié)果是1,否則結(jié)果為0
即“兩個輸入相同時為0,不同則為1”!
異或運算的作用
在計算機中普遍運用,異或(xor)的邏輯符號一般用xor,也有用⊕的:
真⊕假=真
假⊕真=真
假⊕假=假
真⊕真=假
或者為:
True ⊕ False = True
False ⊕ True = True
False ⊕ False = False
True ⊕ True = False
異或運算的巧用
與 其它 語言不同,C語言和C++語言的異或不用xor,而是用“^”,鍵入方式為Shift+6。(而其它語言的“^”一般表示乘方)
若需要交換兩個變量的值,除了通常使用的借用中間變量進行交換外,還可以利用異或,僅使用兩個變量進行交換,如:
a=a^b;
b=b^a;
a=a^b;
詳解:
a1=a^b
b=b^a1=b^a^b=a
//此時a1=a^b
a=a1^b=a^b^a=b
注意:
a=a^b^(b=a);//此類形式是不正確的UB行為,在不同編譯器中會有不同的結(jié)果,切勿使用
這樣就完成了a與b的交換。
綜上:同一變量與另一變量和其異或值異或等于自身。
很多語言都是采用 ~ 作為按位取反運算符,Go 里面采用的是 ^ 。
如果作為二元運算符,^ 表示按位異或,即:對應(yīng)位相同為 0,相異為 1。
操作符 ^,按位置零,例如:z = x ^ y,表示如果 y 中的 bit 位為 1,則 z 對應(yīng) bit 位為 0,否則 z 對應(yīng) bit 位等于 x 中相應(yīng)的 bit 位的值。
對于有符號的整數(shù)來說,是按照補碼進行取反操作的(快速計算方法:對數(shù) a 取反,結(jié)果為 -(a+1) ),對于無符號整數(shù)來說就是按位取反
計算過程
以3為例? 3在內(nèi)存中補碼為 0*** 0011
取反? ? ? ? ? ? 1*** 1100
-1操作? ? ? ? ? 1*** 1011
除符號位取反? ? 1*** 0100 結(jié)果為-4
-------------------------------------------
以9為例 9在內(nèi)存中補碼為 0*** 1001
取反? ? ? ? ? ? 1*** 0110
-1操作? ? ? ? ? 1*** 0101
除符號位取反? ? 1*** 1010 結(jié)果為-10
-------------------------------------------
以-5為例 -5在內(nèi)存中為的補碼為 1*** 1011
為什么呢
-5源碼? ? ? ? ? 1*** 0101
除符號取反? ? ? 1*** 1010
+1操作? ? ? ? ? 1*** 1011
-------------------------------------------
那么-5取反怎么算
補碼 1***1011取反為 0***0100
因為符號位為0,所以是正數(shù)了,正數(shù)的補碼反碼源碼都是一個,所以是4
===================================
再看-1
-1源碼? ? ? ? ? 1*** 0001
除符號取反? ? ? 1*** 1110
+1操作? ? ? ? ? 1*** 1111
補碼 1*** 1111 取反為 0*** 0000
因為符號位為0,所以是正數(shù)了,正數(shù)的補碼反碼源碼都是一個,所以是0
go語言取反輸出的例子看這里
int8 , uint8
int16 , uint16
int32 , uint32
int64 , uint64
int , uint , uintptr
Go為強類型語言,所以上述類型默認為不同類型
如需運算,可通過強制類型轉(zhuǎn)換
+ , - , * , / , %
, , == , = , = 和 !=
比較運算符計算的結(jié)果是布爾值
位與: xy
位或: x|y
異或: x^y
取反: ^x
左移:
右移:
邏輯運算符的計算結(jié)果也是布爾值
邏輯與: xy
邏輯或: x||y
邏輯非: !x
1.異或運算符∧也稱XOR運算符,它的作用是判斷參加運算的兩個二進制位是否為同號,若同號則結(jié)果為0;異號則為1。
2.即0異或0=0,1異或0=1,1異或1=0。
3. C語言位運算符:和、或、異或、取反、左移和右移。
4. 位運算是指按二進制進行的運算。
5.在系統(tǒng)軟件中,常常需要處理二進制位的問題。
6.C語言提供了6個位操作運算符。
7.這些運算符只能用于整型操作數(shù),即只能用于帶符號或無符號的char,short,int和long類型。
異或,英文為exclusive OR,縮寫成xor。異或(xor)是一個數(shù)學(xué)運算符。它應(yīng)用于邏輯運算。異或的數(shù)學(xué)符號為“⊕”,計算機符號為“xor”。
其運算法則為:
a⊕b = (?a ∧ b) ∨ (a ∧?b),如果a、b兩個值不相同,則異或結(jié)果為1。如果a、b兩個值相同,異或結(jié)果為0。
運算方法如下:
真⊕假=真
假⊕真=真
假⊕假=假
真⊕真=假
或者為:
True ⊕ False = True
False ⊕ True = True
False ⊕ False = False
True ⊕ True = False
拓展資料?
異或也叫半加運算,其運算法則相當于不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。
在計算機中普遍運用,異或(xor)的邏輯符號一般用xor,也有用⊕的:真⊕假=真、假⊕真=真、假⊕假=假、真⊕真=假
C語言和C++語言的異或不用xor,而是用“^”,鍵入方式為Shift+6。(而其它語言的“^”一般表示乘方)
資料來源:百度百科《異或》
1、學(xué)習(xí)曲線
它包含了類C語法、GC內(nèi)置和工程工具。這一點非常重要,因為Go語言容易學(xué)習(xí),所以一個普通的大學(xué)生花一個星期就能寫出來可以上手的、高性能的應(yīng)用。在國內(nèi)大家都追求快,這也是為什么國內(nèi)Go流行的原因之一。
2、效率
Go擁有接近C的運行效率和接近PHP的開發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。
3、出身名門、血統(tǒng)純正
之所以說Go語言出身名門,是因為我們知道Go語言出自Google公司,這個公司在業(yè)界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰(zhàn)略考慮。而且從Go語言的發(fā)展態(tài)勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發(fā)展前途。我們看看Go語言的主要創(chuàng)造者,血統(tǒng)純正這點就可見端倪了。
4、組合的思想、無侵入式的接口
Go語言可以說是開發(fā)效率和運行效率二者的完美融合,天生的并發(fā)編程支持。Go語言支持當前所有的編程范式,包括過程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。
5、強大的標準庫
這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標準庫基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個,網(wǎng)絡(luò)層、系統(tǒng)層的庫非常實用。
6、部署方便
我相信這一點是很多人選擇Go的最大理由,因為部署太方便,所以現(xiàn)在也有很多人用Go開發(fā)運維程序。
7、簡單的并發(fā)
它包含降低心智的并發(fā)和簡易的數(shù)據(jù)同步,我覺得這是Go最大的特色。之所以寫正確的并發(fā)、容錯和可擴展的程序如此之難,是因為我們用了錯誤的工具和錯誤的抽象,Go可以說這一塊做的相當簡單。
8、穩(wěn)定性
Go擁有強大的編譯檢查、嚴格的編碼規(guī)范和完整的軟件生命周期工具,具有很強的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會更穩(wěn)定呢?這是因為Go提供了軟件生命周期的各個環(huán)節(jié)的工具,如go
tool、gofmt、go test。