日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

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

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

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

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

但不推薦使用這種方式,附上常用的臨時(shí)變量方法對(duì)比說(shuō)明。

臨時(shí)變量方法:

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

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

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

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

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

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

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

圖1: 臨時(shí)變量法和加減法匯編代碼對(duì)比,點(diǎn)擊圖片查看大圖。

圖2: 異或方法和加減法匯編代碼對(duì)比,點(diǎn)擊圖片查看大圖。


文章題目:詳解C異或運(yùn)算
網(wǎng)頁(yè)網(wǎng)址:http://m.5511xx.com/article/cosgsoo.html