日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解C異或運算

對于異或運算操作,每次都需要讀取兩個數(shù)據(jù)到寄存器中,再進行運算操作,之后把結(jié)果寫回到變量中,前后共需要三次內(nèi)存寫入操作。

創(chuàng)新互聯(lián)網(wǎng)站建設由有經(jīng)驗的網(wǎng)站設計師、開發(fā)人員和項目經(jīng)理組成的專業(yè)建站團隊,負責網(wǎng)站視覺設計、用戶體驗優(yōu)化、交互設計和前端開發(fā)等方面的工作,以確保網(wǎng)站外觀精美、網(wǎng)站建設、網(wǎng)站制作易于使用并且具有良好的響應性。

異或運算可以達到交換兩數(shù)的目的,代碼如下:

void swap(int &a, int &b)
{
   a = a^b;
   b = a^b;
   a = a^b;
}

但不推薦使用這種方式,附上常用的臨時變量方法對比說明。

臨時變量方法:

void swap(int &a, int &b)
{
   int tmp = a;
   a = b;
   b = tmp;
}

對于臨時變量法,每次賦值只要讀取一個變量的值到寄存器,然后再從寄存器寫回到另一個變量中即可,前后涉及兩次內(nèi)存寫入操作;但是對于異或運算操作,每次都需要讀取兩個數(shù)據(jù)到寄存器中,再進行運算操作,之后把結(jié)果寫回到變量中,前后共需要三次內(nèi)存寫入操作。另外一點,異或操作的代碼可讀性差。

如果使用C語言實現(xiàn)上述兩種方法,并用gcc編譯器編譯,可以使用命令 gcc -S swap.c 查看相應的匯編代碼,臨時變量法代碼行數(shù)更少,另外使用 gcc 編譯器時,用異或運算交換數(shù)組會出錯,參見鏈接。

在不引入臨時變量的基礎上,交換兩數(shù)的值還可以使用三次加減法,代碼如下:

void swap(int &a, int &b)
{
   a = a + b;
   b = a - b;
   a = a - b;
}

這種方式同樣需要三次內(nèi)存寫入操作,同時代碼可讀性也較差。

最后附上兩張三種方法編譯后對應匯編代碼對比圖(平臺:Ubuntu14.04,gcc 4.8.4),圖中 swap1.c 文件對應臨時變量法,swap2.c 文件對應加減方法,swap3.c 文件對應異或方法??梢钥吹剑R時變量法編譯出的匯編代碼量最少即效率更高,加減法和異或方法的區(qū)別僅僅是計算方式不同而已,操作步驟是一致的。

圖1: 臨時變量法和加減法匯編代碼對比,點擊圖片查看大圖。

圖2: 異或方法和加減法匯編代碼對比,點擊圖片查看大圖。


分享標題:詳解C異或運算
網(wǎng)頁URL:http://www.dlmjj.cn/article/cosgsoo.html