异或 算法
2016-10-21 本文已影响65人
L柠_檬
解读:网上的一段代码
- (NSString *)pinxCreator:(NSString *)pan withPinv:(NSString *)pinv
{
if (pan.length != pinv.length)
{
return nil;
}
const char *panchar = [pan UTF8String];
const char *pinvchar = [pinv UTF8String];
NSString *temp = [[NSString alloc] init];
for (int i = 0; i < pan.length; i++)
{
int panValue = [self charToint:panchar[i]];
int pinvValue = [self charToint:pinvchar[i]];
temp = [temp stringByAppendingString:[NSString
stringWithFormat:@"%X",panValue^pinvValue]];
}
return temp;
}
- (int)charToint:(char)tempChar
{
if (tempChar >= '0' && tempChar <='9')
{
return tempChar - '0';
}
else if (tempChar >= 'A' && tempChar <= 'F')
{
return tempChar - 'A' + 10;
}
return 0;
}
核心的代码:
temp = [temp stringByAppendingString:[NSString
stringWithFormat:@"%X",panValue^pinvValue]];
C语言:异或符号 ^
int a = 0 ;
int b = 1 ;
NSLog(@"%d",a ^ b);
结果:1
原理:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)
异或算法解读.png
注意:字符异或结果为空,是有问题的~
char a = 0 ;
char b = a ;
NSLog(@"%c",a ^ b);