最近看到“不使用临时变量交换两个变量的值”这个题目
我们最容易想到的做法就是使用相加相减来实现
- (void)solveMethod1 {
int x = 6;
int y = 18;
x = x + y;
y = x - y;//将x赋值给y
x = x - y;
NSLog(@"交换后的x = %d",x);
NSLog(@"交换后的y = %d",y);
}
但是,突然看到有人使用另外一种解法,使用的是位运算符异或^
相应的代码如下:
//使用异或等运算方法来实现
- (void)solveMethod2 {
int x = 6;
int y = 18;
x = x ^ y;//值为2,计算出两者共同的地方
y = x ^ y;
x = x ^ y;
NSLog(@"交换后的x = %d",x);
NSLog(@"交换后的y = %d",y);
}
对于Objective-c中的位运算符,了解的较少,所以查阅了一下资料,在这里总结记录一下:
位运算符总结:
假设A= 60 , B= 13
A= 0011 1100
B= 0000 1101
1.&:二进制“和运算符”,只有两个操作数同位上都为1,结果同位才为1
A & B = 0000 1100
2.| : 二进制“或”运算符,只要两个操作数同位上有一个为1,结果同位就为1
A | B = 0011 1101
- ^ : 二进制“异或”运算符,两个操作数上同位相同,即为0,不同为1
A ^ B = 0011 0010
4.~: 取反 各位0变为1,1变为0
~A = 1100 0011 为-61
5.<< : 左移运算符 ,向左移动指定的位数
A << 2 = 1111 0000
6.>>:右移运算符:向右移动指定的位数
A >> 2 = 0000 1111