C/C++双叹号!!运算符

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;
}

参考:https://blog.csdn.net/hherima/article/details/44944927

原文地址:https://www.cnblogs.com/whiteBear/p/15779832.html