通過位運算實現數值交換

2021-08-20 11:45:41 字數 792 閱讀 1306

對於數值的交換操作,通常會採用第三個變數作為中間變數過渡的交換方式。

temp=a;

a=b;

b=temp;

使用這種方法,可以保證交換的準確性,但是由於會使用第三個變數,占用了額外的記憶體空間。

那麼有沒有辦法不借助第三個變數實現兩個數值的交換呢?可以通過數值相加寄存和位運算兩種方式。

1、相加寄存:

可以將sum=a+b的值暫時寄存到a變數上,由於a=sum-b,所以可以將a值放置到b上,又由於b=sum-a,可以將b值移動至a,實現a,b的交換。

a=a+b;

b=a-b;

a=a=b;

通過這種方式可以再不引入新的變數的情況下實現交換,但是當a+b>int_max時,此時會產生正溢位,導致最終結果錯誤。

2、位運算:

對於任一位向量a,有a^a=0,a^0=a,為了實現交換,可以推導出a=a^a^b,b=b^b^a。

b=a^b;

a=a^b;

b=a^b;

列乙個**來簡單看一下為什麼位運算可以實現數值交換。

初始值a

bb=a^b

aa^b

a=a^b

a^a^b=b

a^bb=a^b

ba^b^b=a

利用異或的運算法則即可實現數值交換(此方法除了減少了中間變數的使用,對於效能提公升並無卵用)。

js通過位運算實現許可權加解密

首先介紹一下js中的位運算 1.與運算,轉化為二進位制數,如果相同位數都為1則得結果為1,否則為0 2.或運算,轉化為二進位制數,如果相同位數只要有乙個為1則得結果為1,否則為0 3.異或運算,轉化為二進位制數,如果相同位數不同則得結果為1,否則為0 4.順便說一下,十進位制數字互相轉化。十進位制轉...

php mysql通過位運算操作推薦位

position 字段設定為tinyint 假定 1代表首頁推薦 2代表欄目推薦 4代表內頁推薦 8代表其他推薦 那麼如果position 欄位的值為3就代表首頁推薦 欄目推薦 1 2 如果position 欄位的值為7代表首頁推薦 欄目推薦 內頁推薦 1 2 4 然後 position i pos...

通過異或交換變數的數值

通過異或交換變數的數值,最我最為推薦的swap方法,相比 借用第三變數,temp a a b b temp 異或交換 更有效率!利用加減法,a a b b a b a a b 異或交換 適用範圍更廣。這裡的適用範圍更廣,說得有點牽強。加減法給我的直觀感覺是 不安全,當 a a b 的結果超出了該變數...