我正在查看PSPDFkit示例代码并看到了这个:
NSDictionary *options = @{kPSPDFProcessorAnnotationTypes :
@(PSPDFAnnotationTypeNone & ~PSPDFAnnotationTypeLink)
};
常量PSPDFAnnotationTypeNone
和PSPDFAnnotationTypeLink
定义如下:
// 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 :(得分:2)
“〜”是按位不 - 运算符。
作为“&amp;”按位和。
这些通常用于位掩码(如在您的示例中)或其他二进制操作(顾名思义)。有关wiki - Operators in C and C++的更多信息。
它们与文字无关。
答案 1 :(得分:0)
首先,我不知道obj-c,只有C,但我猜'&amp;'是'按位AND','〜'是按位NOT。
答案 2 :(得分:0)
它是按位NOT运算符(与许多基于C的语言相同),它反转基础值中的所有位。
因此,例如,8位值0x57
(二进制0101 0111
)变为1010 1000
或0xa8
。
有关各种按位运算符的更完整描述,请参阅here。