c语言中交换a、b两个数的一种算法
来源:百度知道 编辑:UC知道 时间:2024/06/25 04:29:24
哪位高手帮忙分析一下如下算法:
a^=b^=a^=b;
是怎样做到交换a、b两数的。
自己弄懂了,^是位异或的运算符,即比较相同两位的异同,如果相同则赋值为0,否则为1;例3^5=6计算如下:
3=(00000011)2
5=(00000101)2
比较两数他们右数第二第三位不同,根据规则赋为1,其余为0,即运算后为
(00000110)2=6
原式从右到左,a^=b ----> b不变,a^=b即取出所有不相等的位存入a
第二次b^=a,a不变(a为所有不相等的位),b做位异或运算,如果b中位与a(a为所有不相等的位)相同,则原a中的该位必为0(此处有2种情况,不详细说明了);若不同则a中该位必为1.因此b^=a相当于将b变成了原来的a.
最后一个a^=b同上。效果是将a变成原来的b
此算法最大的优点是省略了中间变量,但只能用于相同类型数的交换。
OK,写到这里,与有同样疑惑的同学分享一下。
a^=b^=a^=b;
是怎样做到交换a、b两数的。
自己弄懂了,^是位异或的运算符,即比较相同两位的异同,如果相同则赋值为0,否则为1;例3^5=6计算如下:
3=(00000011)2
5=(00000101)2
比较两数他们右数第二第三位不同,根据规则赋为1,其余为0,即运算后为
(00000110)2=6
原式从右到左,a^=b ----> b不变,a^=b即取出所有不相等的位存入a
第二次b^=a,a不变(a为所有不相等的位),b做位异或运算,如果b中位与a(a为所有不相等的位)相同,则原a中的该位必为0(此处有2种情况,不详细说明了);若不同则a中该位必为1.因此b^=a相当于将b变成了原来的a.
最后一个a^=b同上。效果是将a变成原来的b
此算法最大的优点是省略了中间变量,但只能用于相同类型数的交换。
OK,写到这里,与有同样疑惑的同学分享一下。
a=a^b^(a^b)
定义两个数int x,y;
如果x=0,y=0,x^y==0;
如果x=0,y=1,x^y==1;
如果x=1,y=0,x^y==1;
如果x=1,y=1,x^y==0;
第一次找出不同的地方,并将不同之处用1标记并赋给a,然后用b和不同进行对比,反过来得到a的值,a的值发生改变,b变成a的原值,后一步同理。把两个数写成二进制的形式“异”一下就知道了。
c语言中交换a、b两个数的一种算法
用自定义函数进行两个数的交换(C语言)
a的平方*(b-c)+b的平方*(c-a)+c的平方*(a-b)=0,则a,b,c中至少有两个数相等.
判断两个数a,b是否为互质数的程序,用C语言编写?
若(a^2)*(b-c)+(b^2)(c-a)+(c^2)(a-b)=0,求证:a,b,c三个数中至少有两个数相等
用c语言编写一个程序:两个字符串a、b,将a中所有b中含有的字符删除。
交换两个数的值(C#)?
c语言的中 第一种情况a=0,b=-6,则a&&b的返回值为0,a||b为1
用函数完成任意输入两个数的交换 ,如何用C语言编程
不知道什么错啊.一个很小的C语言两个数交换程序言