日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言 异或_C语言经典例题来袭!5大方法告诉你答案

發布時間:2025/3/13 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 异或_C语言经典例题来袭!5大方法告诉你答案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

各位,今天我們來看一個C語言的經典例題,因為最近有不少人后臺問的問題都跟這個或多或少有點關系,所以今天咱們拿出來對這類問題進行一個總結,話不多說,就問下面的代碼會輸出什么?

#include

意圖很明顯,要用swap函數中交換main函數中的a和b的值,但是很明顯上述代碼是達不到要求的,a和b的值沒有發生改變。其實本題就是C中比較有名傳址和傳值的典型例子,而實現交換main函數中的兩個變量的值,需要把兩個變量的地址傳給swap函數,而不是把兩個變量的值傳過去,也就是要改成如下代碼:

#include

至于原因我想大家應該都能理解了,我們不再展開,上面這個例子也是面試經常會考察的點,希望大家熟記。

關注微信公眾號:C程序編程 免費獲取進階指導和學習資料!

由點及面是一種重要且有效的學習方法,所以我們想通過本例對C中交換兩變量值的知識進行一些總結,方便大家的學習。其實交換兩變量的值從大的方向可以分為兩類(嚴格來說下面講的第一類也屬于第二類,我們姑且這么劃分),一類是函數外交換,也就是本例采用swap函數交換main函數中兩變量值的方法,這里容易出錯的點無非就是址和值的問題,不再贅述。

另一類是函數內交換,也就是不通過其他函數,在本函數內完成,這種方法比較多,在前面的推送中也講過,我總結了下面5種(名稱都為我自取):

1.臨時變量法

方法解釋:采用臨時變量的方法,作為中間過渡,這是最簡單也是大家最容易想到的方法,此法在各種場合應用極多,應該熟練掌握。

#include

2.加減交換法

方法解釋:顧名思義,使用數學中的加減法進行交換,先把a+b的結果暫時先保存在變量a中,然后通過這改變后的a和原始的b進行減法就可以得到交換后的b,缺點是a+b的結果可能越界。

#include

3.異或交換法

方法解釋:巧妙使用異或運算來進行交換,這種方法主要利用了異或的特性a^b的值先保存到a,因為a^b^b=a所以可以順利完成交換,這種方法是很完美的,不存在越界的問題。

#include

4.移位交換法

方法解釋:這種方法不太常用,原理是把原來的int類型的a的值拆分成高16位和低16位,相當于多了16位的暫存空間可以周轉,缺點是如果a或者b超過了16位,這種方法就會出錯,此方法較復雜且容易出錯,因此不建議大家使用。

#include

看到這里,大家應該明白了為什么我在一開始括號中講“第一類嚴格說也屬于第二類了吧”,因為就算你在函數外交換,但交換的那個函數依然會用到上面5種方法之一,為了大家好理解,我們才暫且這么劃分的。

好了,就講到這里吧,希望通過上述文章讓大家對交換兩變量值有重新的認識,感謝各位的耐心閱讀!

關注微信公眾號:C程序編程 免費獲取進階指導和學習資料!

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的c语言 异或_C语言经典例题来袭!5大方法告诉你答案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。