1、问题引入
在阅读https://github.com/amhndu/SimpleNES源代码中ppu.cpp中发现如下代码
m_bgPage = static_cast<CharacterPage>(!!(ctrl & 0x10));
m_sprPage = static_cast<CharacterPage>(!!(ctrl & 0x8));
好奇此处!!(ctrl & 0x10)为何采用了双叹号的格式,“非非”岂不是没有操作吗,意义是什么?
2、解答
!!(expression) 等价于!(!expression),如果express是一个指针,最终结果就是1.这样!!(expression)可以给bool变量赋值了
去 2 次反. 其意义在于可以把整数类型转换为布尔类型。
- (BOOL)isLaunched {
if(self.launchCache)
return yes;
else
return NO;
return NO;
}
如果使用!!,则可写成如下:
- (BOOL)isLaunched {
return !!self.launchCache;
}