在C中否定两次的有效用途是什么?例如,像:
if (!!my_cond) {
}
据我了解,如果!!
为!!my_cond
,my_cond
将保证false
为0,否则为1。你什么时候需要来使用它?
答案 0 :(得分:3)
它可用于将某些内容转换为布尔表达式。
如果foo = !!foo
foo
给出{{1}} 1,如果它不是零,则保留为0,如果已经为0,则保留为0。
您的问题已经在这里得到解答: Confused by use of double logical not (!!) operator
答案 1 :(得分:2)
在您展示它的上下文中,它是无用的,因为值本身将评估为0
或1
。
它可以在不进行这种“布尔”转换的上下文中有用,例如算术或索引
size_t zerovalues[2] = { 0, 0, };
for (size_t i = 0; i < N; ++i)
++zerovalues[!!A[i]];
最后,A
中zerovalues[0]
的值为0,zerovalues[1]
中的值为{{1}}
答案 2 :(得分:1)
双阴性可用于将逻辑转换表达式转换为0或1,以便可以将它们与其他逻辑表达式进行比较。
int x = 63;
printf("Output: %d %d %d\n", x, !x, !!x);
输出:63 0 1
这允许一些逻辑布尔比较,否则会失败。
答案 3 :(得分:0)
这不是一个好的用例,但是你可能遇到与使用这种反模式的代码连接起来并不是不可思议的:
if (x == TRUE) ...
更一般地说,如果你实现的API被记录为特别是在失败时返回0
而在成功时返回1
,这可能是消除最终返回值的最简单方法。
答案 4 :(得分:-2)
我相信这用于告诉编译器将被测变量视为bool类型