请大虾帮我讲解:
以下程序不用第三个变量,实现将两个数进行对调操作,程序中(1)为( ),(2)为( ),(3)为( )。
#include <stdio.h>
main()
{int a,b;
scanf("%d%d",&a,&b);
printf("a=%d b=%d",a,b);
a=(1);b=(2);c=(3);
printf("a=%d b=%d\n",a,b);
}
[此贴子已经被作者于2004-09-19 18:15:33编辑过]
请大虾帮我讲解:
以下程序不用第三个变量,实现将两个数进行对调操作,程序中(1)为( ),(2)为( ),(3)为( )。
#include <stdio.h>
main()
{int a,b;
scanf("%d%d",&a,&b);
printf("a=%d b=%d",a,b);
a=(1);b=(2);c=(3);
printf("a=%d b=%d\n",a,b);
}
[此贴子已经被作者于2004-09-19 18:15:33编辑过]
a = a^b; b = b^a; a = a^b; (3)那个地方写错了,多出了一个变量。
/* a = a^b; b = b^a = b ^ (a ^ b) = (b ^ b) ^ a = a; a = a^b = (a ^ b) ^ a = (a ^ a) ^ b = b; 按位异或,只有当运算的两个二进制位不同是(即1与0),结果是1,其他情况都是0 b ^ b很明显这个两个数的二进制位完全相同,所以异或以后每位都是0,任何数与0进行异或,结果是其本身。 */
楼上的,你又试过吗 ?
^ 和 | 代表什么 , 你知道吗 ?
没在TC上试过,只在脑中试过,
^ :是按位异或运算
| :是按位或运算!
[此贴子已经被作者于2004-09-19 19:07:24编辑过]
两种方法
<1> a^=b;b^=a;a^=b;
<2>a-=b;b+=a;a=b-a
厉害!
[此贴子已经被作者于2004-09-20 05:08:10编辑过]