使用按位运算符交换两个整数



如何使用按位运算符交换两个整数的值,以便不应声明额外的温度变量?

我在这里使用 16 位整数。如果两个整数都不大于 0x00FF 或仅使用其 LSB,则可以执行以下操作:

a = 0x002E;
b = 0x007A;
//first transfer b into a's upper byte
a |= b << 8;
//transfer a's lower byte into b
b = a & 0x00FF //b is now equal to a's original value
//finally right shift a's upper byte
a >>= 8 //a is now equal to b's original value

我认为你不能交换两个大于 0x00FF 的 16 位整数的值,因为它们是,不使用第三个变量,因为当你移动位时,除非你将它们保存在某个地方,否则你会丢失它们。您必须将其中一个整数转换为 long,这将为您提供 32 位来处理,然后执行与上述几乎相同的操作。

最新更新