使用按位异或交换两个数字的问题
在C++中,如果要交换两个变量的值,我们通常会创建一个临时数据以它为桥梁来交换。熟悉位运算的同学也会这么做:int a = 1, b = 2;a ^= b;b ^= a;a ^= b;这样做省去了额外变量的创建,显得比较优雅。但是这么做有一个问题:如果a==b,那么交换完后的a与b就都是0了,这是因为两个相同的数字按位异或的结果是0。因此,三次按位异或的方法只适用于交换两个不同的数字,所以,在一些算法设计中,为了避免一些神奇的bug,请避免使用三次异或。...
原创
2020-12-23 16:51:09 ·
722 阅读 ·
0 评论