#include<stdio.h>
int main()
{
int a = 5;
int b = 3;
printf("交换前:a=%d,b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后:a=%d,b=%d", a, b);
return 0;
}
这种方法有个弊端:整形变量有最大值,当两个变量相加超过最大值就会出现错误
法二:
#include<stdio.h>
int main()
{
int a = 5;
int b = 3;
printf("交换前:a=%d,b=%d\n", a, b);
a =a^b;
b =a^b;
a =a^b;
printf("交换后:a=%d,b=%d", a, b);
return 0;
}
用按位异或操作符比第一种方法要好得多
但一般除了面试官的刁难,交换两个变量还是用创建临时变量的方法更好,效率也更高
2.编写代码实现:求一个整数存储在内存中的二进制中1的个数
法一:
#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
scanf_s("%d", &num);
while (num)
{
if (num % 2 == 1)
{
count++;
}
num = num / 2;
}
printf("二进制中1的个数:%d", count);
return 0;
}
#include<stdio.h>
int main()
{
int num = 0;
scanf_s("%d", &num);
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (1 == ((num >> i) & 1))
{
count++;
}
}
printf("%d", count);
return 0;
}