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零件有什么意义?

4

3 回答 3

2

"~" 是按位运算符。

作为“&”按位

这些通常用于位掩码(如您的示例中)或其他二进制操作(顾名思义)。有关wiki - C 和 C++ 中的运算符的更多信息。

它们与文字没有关系。

于 2013-04-17T06:30:05.517 回答
0

首先,我不知道 obj-c,只知道 C,但我猜 '&' 是 'bitwise AND' 而 '~' 是 bitwise NOT。

于 2013-04-17T06:32:09.367 回答
0

它是按位 NOT 运算符(与许多基于 C 的语言相同),它将基础值中的所有位反转。

因此,例如,八位值0x57(二进制0101 0111)变为1010 1000or 0xa8

有关各种位运算符的更完整描述,请参见此处。

于 2013-04-17T06:32:31.663 回答