如何使用按位运算符交换两个整数的值,以便不应声明其他临时变量?
答案 0 :(得分:0)
我在这里使用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
我不认为你可以交换两个16位整数的值,大于0x00FF,而不使用第三个变量,因为当你移位时,你会失去它们,除非你把它们保存到某个地方。您必须将其中一个整数强制转换为 long ,这将使您可以使用32位,然后执行与上述操作几乎相同的操作。