佚名通过本文主要向大家介绍了dh密钥交换算法,交换算法,密钥交换算法,交换排序算法,交换机算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:异或交换算法
描述:
解决方案1:
描述:
有两个数A和B,现在不通过第三空间交换A和B。
解决方案1:
list($b,$a)=array($a,$b); php版...
解决方案2:if((&a) != (&b)){
a^=b^=a^=b;
}//必须判断地址不同!
解决方案3:在位运算的代数系统中,^运算中 a的逆元仍是a,类比加法 a+(-a)=0 有 a^a=0。 这样想的话,位运算只是在模仿加法运算。
a=a^b 等价 a=a+b
b=a^b 等价 b=a+(-b)
a=a^b 等价 a=a+(-b)
解决方案4:这个题目好像很老了哦,貌似很多地方都有答案
A=A+B A:A+B B:B
B=A-B A:A+B B:A
A=A-B A:B B:A
这个是加法版的
a = a ^ b
b = b ^ a
a = a ^ b
这个是异或版的
解决方案5:首先,感谢@brayden和@kamushin的指导,之前我的理解是错误的,哈哈,留着被踩警示自己。重新补充一下自己的答案
为什么用异或前需要增加判断,是为了防止异或了同一变量,示例代码如下:
void swap(int *arr, int i, int j) {
if (i != j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
当i==j时,如果不加判断会出现问题,原因是arr[i]和arr[j]都是指向同一变量,直接异或会将这个变量变为0