2013-04-17 31 views
0

我看PSPDFkit示例代碼,看到這一點:在這段代碼中如何使用按位運算符?

NSDictionary *options = @{kPSPDFProcessorAnnotationTypes : 
           @(PSPDFAnnotationTypeNone & ~PSPDFAnnotationTypeLink) 
         }; 

常數PSPDFAnnotationTypeNonePSPDFAnnotationTypeLink定義如下:

// Available keys for options. kPSPDFProcessorAnnotationDict in 
// form of pageIndex -> annotations. 
// .. 
extern NSString *const kPSPDFProcessorAnnotationTypes; 

// Annotations defined after the PDF standard. 
typedef NS_OPTIONS(NSUInteger, PSPDFAnnotationType) { 
    PSPDFAnnotationTypeNone  = 0, 
    PSPDFAnnotationTypeLink  = 1 << 1, // Links and multimedia extensions 
    PSPDFAnnotationTypeHighlight = 1 << 2, // (Highlight, Underline, StrikeOut) - 
    PSPDFAnnotationTypeText  = 1 << 3, // FreeText 
    PSPDFAnnotationTypeInk  = 1 << 4, 
    PSPDFAnnotationTypeShape  = 1 << 5, // Square, Circle 
    PSPDFAnnotationTypeLine  = 1 << 6, 
    PSPDFAnnotationTypeNote  = 1 << 7, 
    PSPDFAnnotationTypeStamp  = 1 << 8, 
    PSPDFAnnotationTypeRichMedia = 1 << 10, // Embedded PDF videos 
    PSPDFAnnotationTypeScreen = 1 << 11, // Embedded PDF videos 
    PSPDFAnnotationTypeUndefined = 1 << 31, // any annotation whose type not recognized 
    PSPDFAnnotationTypeAll  = UINT_MAX 
}; 

我明白~是按位不是運營商和&按位與運算符,但在這段代碼中他們的應用程序的目的是什麼?

NSDictionary *options = @{kPSPDFProcessorAnnotationTypes : 
           @(PSPDFAnnotationTypeNone & ~PSPDFAnnotationTypeLink) 
         }; 

基於下面的註釋,上面本來是簡單地寫爲

NSDictionary *options = @{kPSPDFProcessorAnnotationTypes :@(PSPDFAnnotationTypeNone)}; 

既然是一樣的(0 & ~2) => 0。添加& ~PSPDFAnnotationTypeLink部分有什麼意義?

+0

在這個代碼的上下文中,它似乎是一個混淆的方式獲得0:'(0&〜2)'=> 0 –

+0

所以寫額外的'&〜2'的值是多少?爲什麼不把'0'? – abbood

+0

我不知道...會投票重新開放是關於爲什麼重點的問題。 –

回答

2

「〜」是按位而不是-操作員。

作爲「&」,按位

這些通常用於位掩碼(如您的示例中)或其他二進制操作(如名稱所示)。更多關於wiki - Operators in C and C++的信息。

它們與文字沒有任何關係。

+2

用「按位」替換「二進制」。 – rmaddy

0

首先,我不知道obj-​​c,只有C,但我猜'&'是'按位AND',而'〜'是按位NOT。

0

它是位運算符NOT運算符(與許多基於C的語言相同),它顛倒了基礎值中的所有位。

因此,例如,八個比特值0x57(二進制0101 0111)變爲1010 10000xa8

請參閱here瞭解各種按位運算符的更完整說明。