C語言不使用中間變量交換兩個變量值

1.加減法

#include <stdio.h>
int main(int argc, char *argv[])
{
  int a=1,b=2;
  a=a+b;
  b=a-b;
  a=a-b;
  printf("a=%d b=%d",a,b);
}

適用於交換整型變量,浮點型變量交換可能會損失精度。

2.乘除法

#include <stdio.h>
int main(int argc, char *argv[])
{
  int a=1,b=2;
  a = a * b;
  b = a / b;
  a = a / b;
  printf("a=%d b=%d",a,b);
}

其中a, b必須爲非0值,適用於交換整型變量,浮點型變量交換可能會損失精度。

3.異或法

#include <stdio.h>
int main(int argc, char *argv[])
{
  int a=1,b=2;
  a ^= b;
  b ^= a;
  a ^= b;
  printf("a=%d b=%d",a,b);
}

只適用於對整型變量進行交換,不適用於浮點型變量交換。

4.強制轉換移位法

#include <stdio.h>
int main(int argc, char *argv[])
{
  int a=1,b=2;
  b = (long int)((long int)a << 32 | (a = b)) >> 32;
  printf("a=%d b=%d",a,b);
}

只適用於對整型變量進行交換,不適用於浮點型變量交換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章