c语言 异或_C语言经典例题来袭!5大方法告诉你答案
各位,今天我們來看一個(gè)C語言的經(jīng)典例題,因?yàn)樽罱胁簧偃撕笈_(tái)問的問題都跟這個(gè)或多或少有點(diǎn)關(guān)系,所以今天咱們拿出來對(duì)這類問題進(jìn)行一個(gè)總結(jié),話不多說,就問下面的代碼會(huì)輸出什么?
#include意圖很明顯,要用swap函數(shù)中交換main函數(shù)中的a和b的值,但是很明顯上述代碼是達(dá)不到要求的,a和b的值沒有發(fā)生改變。其實(shí)本題就是C中比較有名傳址和傳值的典型例子,而實(shí)現(xiàn)交換main函數(shù)中的兩個(gè)變量的值,需要把兩個(gè)變量的地址傳給swap函數(shù),而不是把兩個(gè)變量的值傳過去,也就是要改成如下代碼:
#include至于原因我想大家應(yīng)該都能理解了,我們不再展開,上面這個(gè)例子也是面試經(jīng)常會(huì)考察的點(diǎn),希望大家熟記。
關(guān)注微信公眾號(hào):C程序編程 免費(fèi)獲取進(jìn)階指導(dǎo)和學(xué)習(xí)資料!由點(diǎn)及面是一種重要且有效的學(xué)習(xí)方法,所以我們想通過本例對(duì)C中交換兩變量值的知識(shí)進(jìn)行一些總結(jié),方便大家的學(xué)習(xí)。其實(shí)交換兩變量的值從大的方向可以分為兩類(嚴(yán)格來說下面講的第一類也屬于第二類,我們姑且這么劃分),一類是函數(shù)外交換,也就是本例采用swap函數(shù)交換main函數(shù)中兩變量值的方法,這里容易出錯(cuò)的點(diǎn)無非就是址和值的問題,不再贅述。
另一類是函數(shù)內(nèi)交換,也就是不通過其他函數(shù),在本函數(shù)內(nèi)完成,這種方法比較多,在前面的推送中也講過,我總結(jié)了下面5種(名稱都為我自取):
1.臨時(shí)變量法
方法解釋:采用臨時(shí)變量的方法,作為中間過渡,這是最簡(jiǎn)單也是大家最容易想到的方法,此法在各種場(chǎng)合應(yīng)用極多,應(yīng)該熟練掌握。
#include2.加減交換法
方法解釋:顧名思義,使用數(shù)學(xué)中的加減法進(jìn)行交換,先把a(bǔ)+b的結(jié)果暫時(shí)先保存在變量a中,然后通過這改變后的a和原始的b進(jìn)行減法就可以得到交換后的b,缺點(diǎn)是a+b的結(jié)果可能越界。
#include3.異或交換法
方法解釋:巧妙使用異或運(yùn)算來進(jìn)行交換,這種方法主要利用了異或的特性a^b的值先保存到a,因?yàn)閍^b^b=a所以可以順利完成交換,這種方法是很完美的,不存在越界的問題。
#include4.移位交換法
方法解釋:這種方法不太常用,原理是把原來的int類型的a的值拆分成高16位和低16位,相當(dāng)于多了16位的暫存空間可以周轉(zhuǎn),缺點(diǎn)是如果a或者b超過了16位,這種方法就會(huì)出錯(cuò),此方法較復(fù)雜且容易出錯(cuò),因此不建議大家使用。
#include看到這里,大家應(yīng)該明白了為什么我在一開始括號(hào)中講“第一類嚴(yán)格說也屬于第二類了吧”,因?yàn)榫退隳阍诤瘮?shù)外交換,但交換的那個(gè)函數(shù)依然會(huì)用到上面5種方法之一,為了大家好理解,我們才暫且這么劃分的。
好了,就講到這里吧,希望通過上述文章讓大家對(duì)交換兩變量值有重新的認(rèn)識(shí),感謝各位的耐心閱讀!
關(guān)注微信公眾號(hào):C程序編程 免費(fèi)獲取進(jìn)階指導(dǎo)和學(xué)習(xí)資料!
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的c语言 异或_C语言经典例题来袭!5大方法告诉你答案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery实现登录失败提示_浅谈jQu
- 下一篇: c 普通的文本变成注释文本的快捷键_In