機(jī)內(nèi)碼(補(bǔ)碼):
成都創(chuàng)新互聯(lián)是一家專業(yè)提供敘州企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為敘州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
23: 00000000,00010111
2: 00000000,00000010
5: 00000000,00000101
異或優(yōu)先級(jí)高,先算異或,再算位或
2^5,2與5異或,異或的法則是相同的為0,不同的為1,由上面的二進(jìn)制很明顯結(jié)果為:00000000,00000111
再算位或,23與此結(jié)果求或,很顯然仍然為:00000000,00010111 即結(jié)果是23。
C語言中,異或運(yùn)算符是^。
不管運(yùn)算對(duì)象是10進(jìn)制的數(shù)還是16進(jìn)制的數(shù)(或其他進(jìn)制的數(shù)),進(jìn)行^運(yùn)算時(shí),都是將運(yùn)算對(duì)象轉(zhuǎn)換為二進(jìn)制,按位進(jìn)行異或運(yùn)算。
舉例說明如下:
int a=0x9a, b=0x56;
int c = a^b; // 將a和b進(jìn)行異或運(yùn)算
運(yùn)算過程是
a = 1001 1010 // 0x9a
b = 0101 0110 // 0x56
c = 1100 1100 // 0xcc (對(duì)應(yīng)的二進(jìn)制位進(jìn)行異或運(yùn)算)
輸出的時(shí)候可以按16進(jìn)制輸出,如:
printf("%x", c);
異或的意思就是相異為真。。
現(xiàn)在問題主要是出現(xiàn)在這一句。。
b[--i]=a[j]^a[--j];
注意啦。。編譯器編譯的時(shí)候是從后向前的。。也就是先算a[--j],這樣j就先自減了。。j從3變?yōu)?。。然后再算a[j],因?yàn)閖是2,調(diào)用的時(shí)候,就是調(diào)a[2]
所以整個(gè)語句第一次執(zhí)行的時(shí)候就是b[2]=a[2]^a[2],結(jié)果顯然是0;
所以輸出的是1100
1、概念:參加運(yùn)算的兩個(gè)對(duì)象,按二進(jìn)制位進(jìn)行“與”運(yùn)算,負(fù)數(shù)按補(bǔ)碼形式參加按位與運(yùn)算。
2、運(yùn)算規(guī)則:00=0; 01=0;10=0;11=1;即:兩位同時(shí)為“1”,結(jié)果才為“1”,否則為0【有0則0】
例如:35=1,即0000 0011 0000 0101 = 0000 0001
3、“與運(yùn)算”特殊用途:
(1)清零。如果想將一個(gè)單元清零,即使其全部二進(jìn)制位為0,只要與一個(gè)各位都為零的數(shù)值相與,結(jié)果為零。
(2)取一個(gè)數(shù)中指定位。找一個(gè)數(shù),對(duì)應(yīng)X要取的位,該數(shù)的對(duì)應(yīng)位為1,其余位為零,此數(shù)與X進(jìn)行“與運(yùn)算”可以得到X中的指定位。
例:設(shè)X=10101110,取X的低4位,用 X 0000 1111 = 0000 1110 即可得到;還可用來取X的2、4、6位。
二、按位或(|)
1、概念:參加運(yùn)算的兩個(gè)對(duì)象按二進(jìn)制位進(jìn)行“或”運(yùn)算,負(fù)數(shù)按補(bǔ)碼形式參加按位與運(yùn)算。
2、運(yùn)算規(guī)則:0|0=0;0|1=1;1|0=1;1|1=1;即 :參加運(yùn)算的兩個(gè)對(duì)象只要有一個(gè)為1,其值為1【有1則1】
例如:3|5=7,即 0000 0011 | 0000 0101 = 0000 0111
3、“或運(yùn)算”特殊作用:
(1)常用來對(duì)一個(gè)數(shù)據(jù)的某些位置1。找到一個(gè)數(shù),對(duì)應(yīng)X要置1的位,該數(shù)的對(duì)應(yīng)位為1,其余位為零。此數(shù)與X相或可使X中的某些位置1。
例:將X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。
三、異或運(yùn)算(^)
1、概念:參加運(yùn)算的兩個(gè)數(shù)據(jù),按二進(jìn)制位進(jìn)行“異或”運(yùn)算
2、運(yùn)算規(guī)則:0^0=0;0^1=1;1^0=1;1^1=0;即:參加運(yùn)算的兩個(gè)對(duì)象,如果兩個(gè)相應(yīng)位為“異”(值不同),則該位結(jié)果為1,否則為0【同0異1】
例如:3^5=6,即0000 0011^0000 0101 = 0000 0110
3、“異或運(yùn)算”特殊作用:
(1)使特定位翻轉(zhuǎn) 找一個(gè)數(shù),對(duì)應(yīng)X要翻轉(zhuǎn)的各位,該數(shù)的對(duì)應(yīng)位為1,其余位為零,此數(shù)與X對(duì)應(yīng)位異或即可。
(2)與0相異或,保留原值 ,X ^ 0000 0000 = 1010 1110。
例:X=10101110,使X低4位翻轉(zhuǎn),用X ^ 0000 1111 = 1010 0001即可得到。
(3)基于異或運(yùn)算,不引用新變量交換兩個(gè)變量的值
a = a ^ b; b = a ^ b; a = a ^ b;
【同樣基于加減法的話有:a = a + b; b = a - b; a = a -b;】
四、不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算
如果兩個(gè)不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算時(shí),系統(tǒng)會(huì)將二者按右端對(duì)齊,然后進(jìn)行位運(yùn)算。
以“與”運(yùn)算為例說明如下:我們知道在C語言中l(wèi)ong型占4個(gè)字節(jié),int型占2個(gè)字節(jié),如果一個(gè)long型數(shù)據(jù)與一個(gè)int型數(shù)據(jù)進(jìn)行“與”運(yùn)算,右端對(duì)齊后,左邊不足的位依下面三種情況補(bǔ)足,
(1)如果整型數(shù)據(jù)為正數(shù),左邊補(bǔ)16個(gè)0。
(2)如果整型數(shù)據(jù)為負(fù)數(shù),左邊補(bǔ)16個(gè)1。
(3)如果整形數(shù)據(jù)為無符號(hào)數(shù),左邊也補(bǔ)16個(gè)0。
如:long a=123;int b=1;計(jì)算a b。
如:long a=123;int b=-1;計(jì)算a b。
如:long a=123;unsigned int b=1;計(jì)算a b。
C語言的異或操作是位操作的一種,其運(yùn)算符號(hào)為^。
要打出這個(gè)符號(hào),需要在英文輸入法下,輸入shift + 6
即
1 按下shift, 左右均可;
2 按6, 即按下,抬起;
3 抬起shift。
異或操作是按位操作,當(dāng)兩個(gè)操作數(shù)同一位上值相同時(shí)(同為1或同為0),結(jié)果對(duì)應(yīng)位上的值為0;否則值為1。
分享標(biāo)題:異或函數(shù)如何實(shí)現(xiàn)c語言,c語言異或代碼實(shí)現(xiàn)
瀏覽地址:http://chinadenli.net/article42/hohjec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、ChatGPT、網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)