程序员面试宝典之 交换a和b

ab交换

1.      There are two int variables: aand b, don’t use “if” “?:” “switch” or other judgement statements, find out thebiggest one of the two numbers.

       方法1.int max=(a+b+abs(a-b))/2;

例如:

       inta=0;

       intb=2;

       intmax=(a+b+abs(a-b))/2;

       printf("max==%d\n",max);

       return0;

输出为:

       max==2

 

2.      如何将 ab的值互换而不使用任何中间变量

       方案1.

       a=a+b;

       b=a-b;

       a=a-b;

       这样如果a和b的值都很大的情况下可能会溢出。

       方案2: 异或

       a=a^b;

       b=a^b;

       a=a^b;

       这样无需担心溢出问题

       这样做的原理就是按位异或运算。 按位异或运算符^是双目运算符,其功能是参与运算的两个数各对应的二进制位相异或,当对应的二进制位相异的时候,结果为1.参与运算的数是以补码的形式出现。例如9^5可以写成:

       00001001^ 00000101=00001100

       例如将a=9和b=5互换

       a=a^b;  00001001^00000101=00001100

       b=a^b;  00001100^00000101=00001001 此时b=9

       a=a^b;  00001100^00001001=00000101 a=5

       例如:

       inta=1;

       intb=2;

       a=a^b;

       b=a^b;

       a=a^b;

       printf("a==%d\nb==%d\n",a,b);

输出为:

       a==2

       b==1

达到了交换的目的


你可能感兴趣的:(面试,variables)