精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

異或運(yùn)算規(guī)則及其應(yīng)用詳解

姚小熊27 ? 來源:網(wǎng)絡(luò)整理 ? 2018-03-01 14:22 ? 次閱讀

異或運(yùn)算簡介

異或運(yùn)算一般指異或。英文為exclusiveOR,縮寫成xor。異或(xor)是一個(gè)數(shù)學(xué)運(yùn)算符。它應(yīng)用于邏輯運(yùn)算。異或的數(shù)學(xué)符號(hào)為“⊕”,計(jì)算機(jī)符號(hào)為“xor”。其運(yùn)算法則為:

a⊕b=(?a∧b)∨(a∧?b)

如果a、b兩個(gè)值不相同,則異或結(jié)果為1。如果a、b兩個(gè)值相同,異或結(jié)果為0。

異或也叫半加運(yùn)算,其運(yùn)算法則相當(dāng)于不帶進(jìn)位的二進(jìn)制加法:二進(jìn)制下用1表示真,0表示假,則異或的運(yùn)算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進(jìn)位。

異或略稱為XOR、EOR、EX-OR

程序中有三種演算子:XOR、xor、⊕。

使用方法如下

z=x⊕y

z=xxory

異或運(yùn)算規(guī)則

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是二進(jìn)制數(shù)0101,y是二進(jìn)制數(shù)1011;

則x⊕y=1110

只有在兩個(gè)比較的位不同時(shí)其結(jié)果是1,否則結(jié)果為0

即“兩個(gè)輸入相同時(shí)為0,不同則為1”!

異或運(yùn)算規(guī)則及其應(yīng)用

異或運(yùn)算的作用

在計(jì)算機(jī)中普遍運(yùn)用,異或(xor)的邏輯符號(hào)一般用xor,也有用⊕的:

真⊕假=真

假⊕真=真

假⊕假=假

真⊕真=假

或者為:

True⊕False=True

False⊕True=True

False⊕False=False

True⊕True=False

部分計(jì)算機(jī)語言用1表示真,用0表示假,所以兩個(gè)字節(jié)按位異或如下

異或運(yùn)算規(guī)則及其應(yīng)用

下面是兩個(gè)二進(jìn)制數(shù)值進(jìn)行異或計(jì)算:

異或運(yùn)算規(guī)則及其應(yīng)用

現(xiàn)實(shí)中用的都是十進(jìn)制的數(shù)值,那么我們來看一看兩個(gè)十進(jìn)制數(shù)值是怎么進(jìn)行異或計(jì)算:

5⊕3=?

1.進(jìn)行異或計(jì)算前會(huì)把數(shù)值都轉(zhuǎn)換為二進(jìn)制:

5和3轉(zhuǎn)為二進(jìn)制分別為:0101、0011

異或運(yùn)算規(guī)則及其應(yīng)用

2.再把結(jié)果0110轉(zhuǎn)換為十進(jìn)制的:6

3.所以5⊕3=6

異或運(yùn)算的巧用

與其它語言不同,C語言C++語言的異或不用xor,而是用“^”,鍵入方式為Shift+6。(而其它語言的“^”一般表示乘方)

若需要交換兩個(gè)變量的值,除了通常使用的借用中間變量進(jìn)行交換外,還可以利用異或,僅使用兩個(gè)變量進(jìn)行交換,如:

異或運(yùn)算規(guī)則及其應(yīng)用

這樣就完成了a與b的交換。

綜上:同一變量與另一變量和其異或值異或等于另一個(gè)數(shù),如(a^b)^a=b。

用例:可使用于加密算法某一環(huán)節(jié)或更多環(huán)節(jié),使算法更復(fù)雜,不易被破解,安全性更高。

異或運(yùn)算經(jīng)典應(yīng)用

參與運(yùn)算的兩個(gè)值,如果兩個(gè)相應(yīng)bit位相同,則結(jié)果為0,否則為1。

即:

0^0=0,

1^0=1,

0^1=1,

1^1=0

例如:10100001^00010001=10110000

按位異或的3個(gè)特點(diǎn):

(1)0^0=0,0^1=10異或任何數(shù)=任何數(shù)

(2)1^0=1,1^1=01異或任何數(shù)-任何數(shù)取反

(3)任何數(shù)異或自己=把自己置0

按位異或的幾個(gè)常見用途:

(1)使某些特定的位翻轉(zhuǎn)

例如對數(shù)10100001的第2位和第3位翻轉(zhuǎn),則可以將該數(shù)與00000110進(jìn)行按位異或運(yùn)算。

10100001^00000110=10100111

(2)實(shí)現(xiàn)兩個(gè)值的交換,而不必使用臨時(shí)變量。

例如交換兩個(gè)整數(shù)a=10100001,b=00000110的值,可通過下列語句實(shí)現(xiàn):

a=a^b;//a=10100111

b=b^a;//b=10100001

a=a^b;//a=00000110

////////////////////////////////////////////////////////////

兩個(gè)變量交換值的方法【http://blog.sina.com.cn/s/blog_676015470100izpg.html】

第一種方法,大家會(huì)借助第三個(gè)變量來實(shí)現(xiàn):

如:C=A;A=B;B=C;

這種方法需要借助第三變量來實(shí)現(xiàn);

第二種方法是利用加減法實(shí)現(xiàn)兩個(gè)變量的交換,

如:A=A+B;B=A-B;A=A-B;

第三種方法是得用位異或運(yùn)算來實(shí)現(xiàn),也是效率最高的一種,在大量數(shù)據(jù)交換的時(shí)候,效率明顯優(yōu)于前兩種方法,

如:A=A^B;B=A^B;A=A^B;

原理:利用一個(gè)數(shù)異或本身等于0和異或運(yùn)算符合交換率。

PS:還有一篇更為深刻的文章對換值進(jìn)行了探討,作者的研究精神值得學(xué)習(xí):

http://rednaxelafx.javaeye.com/blog/134002

/////////////////////////////////////////////////////////////

(3)在匯編語言中經(jīng)常用于將變量置零:

xora,a

(4)快速判斷兩個(gè)值是否相等

舉例1:判斷兩個(gè)整數(shù)a,b是否相等,則可通過下列語句實(shí)現(xiàn):

return((a^b)==0)

舉例2:Linux中最初的ipv6_addr_equal()函數(shù)的實(shí)現(xiàn)如下:

staticinlineintipv6_addr_equal(conststructin6_addr*a1,conststructin6_addr*a2)

{

return(a1-》s6_addr32[0]==a2-》s6_addr32[0]&&

a1-》s6_addr32[1]==a2-》s6_addr32[1]&&

a1-》s6_addr32[2]==a2-》s6_addr32[2]&&

a1-》s6_addr32[3]==a2-》s6_addr32[3]);

}

可以利用按位異或?qū)崿F(xiàn)快速比較,最新的實(shí)現(xiàn)已經(jīng)修改為:

staticinlineintipv6_addr_equal(conststructin6_addr*a1,conststructin6_addr*a2)

{

return(((a1-》s6_addr32[0]^a2-》s6_addr32[0])|

(a1-》s6_addr32[1]^a2-》s6_addr32[1])|

(a1-》s6_addr32[2]^a2-》s6_addr32[2])|

(a1-》s6_addr32[3]^a2-》s6_addr32[3]))==0);

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 異或運(yùn)算
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    1984
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    LABVIEW中如何實(shí)現(xiàn)兩個(gè)十六進(jìn)制數(shù)的按位運(yùn)算

    求大神指點(diǎn)LABVIEW中如何實(shí)現(xiàn)兩個(gè)十六進(jìn)制數(shù)的按位運(yùn)算,非常感謝!
    發(fā)表于 02-13 23:00

    VHDL運(yùn)算

    請問各位,在運(yùn)算時(shí),如果兩個(gè)輸入端,一個(gè)有信號(hào),一個(gè)沒有信號(hào),是不是就無法進(jìn)行運(yùn)算了?
    發(fā)表于 12-26 16:44

    C語言總結(jié)之運(yùn)算的一些特性及巧妙應(yīng)用

    C語言總結(jié)之運(yùn)算的一些特性及巧妙應(yīng)用1.一個(gè)數(shù)和自己做的結(jié)果是0。如果需要一個(gè)常數(shù)0,x86平臺(tái)的編譯器可能會(huì)生成這樣的指令:xor
    發(fā)表于 09-11 15:05

    單片機(jī)教程(13)邏輯與指令詳解

    ) 01110001(56H) 00100110結(jié)果 00100000 即20H,從上面的式子能看出,兩個(gè)參與運(yùn)算的值只要其中有一個(gè)位上是0,則這位的結(jié)果就是0,兩個(gè)同是1,結(jié)果才是1。理解了邏輯與的運(yùn)算規(guī)則,結(jié)果自然
    發(fā)表于 06-14 18:22

    什么是_運(yùn)算運(yùn)算的作用

    ,是一個(gè)數(shù)學(xué)運(yùn)算符,英文為exclusive OR,縮寫為xor,應(yīng)用于邏輯運(yùn)算的數(shù)學(xué)
    發(fā)表于 11-28 11:19 ?11.9w次閱讀
    什么是<b class='flag-5'>異</b><b class='flag-5'>或</b>_<b class='flag-5'>異</b><b class='flag-5'>或</b><b class='flag-5'>運(yùn)算</b>及<b class='flag-5'>異</b><b class='flag-5'>或</b><b class='flag-5'>運(yùn)算</b>的作用

    只需運(yùn)算的秘密分享方案

    針對傳統(tǒng)基于插值多項(xiàng)式的秘密分享方案,需要復(fù)雜的多項(xiàng)式運(yùn)算,當(dāng)涉及的數(shù)據(jù)比較大時(shí),運(yùn)算效率特別低的問題,提出一種結(jié)合數(shù)據(jù)分塊方法以及僅需要在GF(2)上的
    發(fā)表于 01-07 12:05 ?0次下載
    只需<b class='flag-5'>異</b><b class='flag-5'>或</b><b class='flag-5'>運(yùn)算</b>的秘密分享方案

    一文看懂C語言運(yùn)算

    或是一個(gè)數(shù)學(xué)運(yùn)算符它應(yīng)用于邏輯運(yùn)算。本文開始介紹了運(yùn)算的法則,其次介紹了
    發(fā)表于 03-01 11:52 ?4.6w次閱讀
    一文看懂C語言<b class='flag-5'>異</b><b class='flag-5'>或</b><b class='flag-5'>運(yùn)算</b>

    邏輯運(yùn)算怎么算

    本文開始對邏輯運(yùn)算進(jìn)行了介紹,介紹了邏輯運(yùn)算性質(zhì),其次分析了邏輯
    的頭像 發(fā)表于 03-01 15:11 ?10.7w次閱讀
    邏輯<b class='flag-5'>異</b><b class='flag-5'>或</b><b class='flag-5'>運(yùn)算</b>怎么算

    運(yùn)算有什么用_二進(jìn)制運(yùn)算法則

    本文開始介紹了運(yùn)算的邏輯表達(dá)式,其次分析了運(yùn)算有什么用以及介紹了
    的頭像 發(fā)表于 03-28 16:14 ?4.8w次閱讀
    <b class='flag-5'>異</b><b class='flag-5'>或</b><b class='flag-5'>運(yùn)算</b>有什么用_二進(jìn)制<b class='flag-5'>異</b><b class='flag-5'>或</b><b class='flag-5'>運(yùn)算</b>法則

    JAVA中的交換運(yùn)算規(guī)則

    Java中的位運(yùn)算符中有一個(gè)叫做運(yùn)算符,符號(hào)為(^)或者 Xor
    的頭像 發(fā)表于 05-05 23:21 ?2418次閱讀
    JAVA中的<b class='flag-5'>異</b><b class='flag-5'>或</b>交換<b class='flag-5'>運(yùn)算</b><b class='flag-5'>規(guī)則</b>

    運(yùn)算怎么算

    ,英文為exclusive OR,縮寫成xor。(eor)是一個(gè)數(shù)學(xué)運(yùn)算符。它應(yīng)用于邏輯運(yùn)算
    的頭像 發(fā)表于 11-19 16:00 ?3.2w次閱讀

    邏輯的定義和應(yīng)用 邏輯或與邏輯與的區(qū)別

    邏輯(XOR,Exclusive OR)是一種二進(jìn)制運(yùn)算,其結(jié)果取決于兩個(gè)輸入值是否不同。如果兩個(gè)輸入值相同,結(jié)果為0(假);如果兩個(gè)輸入值不同,結(jié)果為1(真)。邏輯或在計(jì)算機(jī)科
    的頭像 發(fā)表于 11-19 09:40 ?180次閱讀

    邏輯運(yùn)算符在Python中的用法

    在Python編程語言中,邏輯運(yùn)算符并不直接作為一個(gè)內(nèi)置的操作符存在,因?yàn)镻ython更側(cè)重于高級(jí)編程和可讀性,并沒有直接提供
    的頭像 發(fā)表于 11-19 09:46 ?81次閱讀

    如何利用邏輯提高數(shù)據(jù)處理效率

    在計(jì)算機(jī)科學(xué)和數(shù)據(jù)處理領(lǐng)域,邏輯(XOR)是一種基本的位運(yùn)算,它在多個(gè)方面展現(xiàn)出其獨(dú)特的價(jià)值。 邏輯的原理 邏輯
    的頭像 發(fā)表于 11-19 09:54 ?105次閱讀

    邏輯的常見誤區(qū)及解決方法

    用于布爾值(真/假)之間的運(yùn)算,其結(jié)果是基于輸入值的邏輯差異。 按位或則用于整數(shù)二進(jìn)制數(shù)的每一位進(jìn)行
    的頭像 發(fā)表于 11-19 09:56 ?104次閱讀