異或 算法

解讀:網上的一段代碼

- (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);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容