數(shù)據(jù)類型范圍 1:編程實(shí)現(xiàn)由鍵盤輸入兩個整數(shù),將其賦給變量x和y并輸出,交換x和y的值后再輸出,用函數(shù)輸出?
1:編程實(shí)現(xiàn)由鍵盤輸入兩個整數(shù),將其賦給變量x和y并輸出,交換x和y的值后再輸出,用函數(shù)輸出?可以使用以下三種方法:1。方法1:[中間變量]通過設(shè)置一個變量來交換兩個值。這個方法最直接,也最容易理解(
1:編程實(shí)現(xiàn)由鍵盤輸入兩個整數(shù),將其賦給變量x和y并輸出,交換x和y的值后再輸出,用函數(shù)輸出?
可以使用以下三種方法:1。方法1:[中間變量]通過設(shè)置一個變量來交換兩個值。這個方法最直接,也最容易理解(為了代碼可讀性,建議使用這個方法),但是有一個臨時變量。如果不想創(chuàng)建臨時變量,可以使用以下方法。2方法二:通過加減法實(shí)現(xiàn)價值交換。具體代碼如下:3。方法3:[異或運(yùn)算]。關(guān)于XOR有幾個屬性:1。任何變量x和它本身的異或結(jié)果是0,即x^x=0。2任何變量x和0的異或結(jié)果不變,即x^0=x.3。異或運(yùn)算可以組合,即a^B^C=(a^B)^C=a^(B^C)。4異或運(yùn)算是可交換的,即a^B=B^a。實(shí)現(xiàn)過程如下:第一步是a=a^B,變量的結(jié)果是a^B。第二步是B=a^B的右邊等號是(a^B)^B=a^(B^B)=a^0=a。經(jīng)過計算,B中的值是a。第三步是a=a^B。此時,賦值號右側(cè)a的值仍然是a^B,賦值號右側(cè)B的值是原始a,即a^B=(a^B)^a=a^B^a=(a^a)^B=0^B=B在等號右側(cè)。此值分配給a,即a=B。代碼如下:
如何不使用第三個變量來交換兩個數(shù)的值?
算術(shù)運(yùn)算;指針地址運(yùn)算;位運(yùn)算;堆棧實(shí)現(xiàn)。具體操作如下:其原理是:以A、B為軸上的點(diǎn)數(shù),圍繞兩點(diǎn)之間的距離來計算。具體流程:第一句“a=B-a”計算AB兩點(diǎn)之間的距離,保存在a中;第二句“B=B-a”計算a到原點(diǎn)的距離(B到原點(diǎn)的距離與AB的距離之差),保存在B中;第三句話“a=ba”計算從B到原點(diǎn)的距離(從a到原點(diǎn)的距離和從ab到原點(diǎn)的距離之和),并將其保存在a中。完成交換。與標(biāo)準(zhǔn)算法相比,該算法增加了三個計算過程,但不需要臨時變量的幫助。(以下簡稱算術(shù)算法)缺點(diǎn):只能用于數(shù)字型,不能用于字符串型。A和B可能溢出(超出int的范圍)。溢出是相對的。如果溢出來了,回來就好了。所以不溢出也沒關(guān)系,就是不安全。因?yàn)榈刂返倪\(yùn)算實(shí)際上是一個整數(shù)運(yùn)算,例如:將兩個地址相減得到一個整數(shù),表示內(nèi)存中兩個變量的存儲位置之間分隔了多少字節(jié);地址和整數(shù)相加,即“a 10”表示最后10個a型數(shù)據(jù)單元的地址a作為基址。因此,在理論上,我們可以通過類似于算術(shù)算法的運(yùn)算來完成地址交換,從而達(dá)到交換變量的目的。該算法的實(shí)現(xiàn)取決于異或運(yùn)算的特點(diǎn)。通過異或操作,數(shù)據(jù)中的某些位可以翻轉(zhuǎn),而其他位保持不變。這意味著任何數(shù)字和任何給定值都是XOR的兩倍,并且該值保持不變。上述算法都實(shí)現(xiàn)了兩個變量值的交換,而不需要其他變量的幫助。相對而言,算術(shù)算法和位算法的計算量是相同的。地址算法中的計算比較復(fù)雜,但很容易實(shí)現(xiàn)大類型(如自定義類或結(jié)構(gòu))的交換。而前兩者只能進(jìn)行整形數(shù)據(jù)的交換(理論上,重載“^”運(yùn)算符,也可以實(shí)現(xiàn)),現(xiàn)在需要進(jìn)行任意結(jié)構(gòu)的交換。
異或有什么用?
異或用于二進(jìn)制數(shù)的運(yùn)算,可以反轉(zhuǎn)每個二進(jìn)制位