标准是否保证!!(x)
返回0/1?
请注意,我并不是在询问C++中是否定义了bool类型。
在C99中,参见 §6.5.3.3/4:
逻辑非操作符!的结果是0,如果其操作数与0不相等,则其结果为1。结果的类型为int。表达式!E等价于(0 == E)。
所以,!x
和!!y
只能产生0或1作为整数。
对于其他运算符,在C99中还可以参见《是否定义了大于、小于、非、&&、||或==的“真”结果?》
!!x
可以将我的代码时间减少约5%,而不是x = ( x ? 1 : 0)
。无论如何,感谢标准的引用,它非常有帮助。 - amit这实际上是一条评论,但太长了。
在寻找答案时,我发现了一份非常奇怪的文件:The New C Standard: An Economic and Cultural Commentary.他们说学术界资金不足。(这里是完整的2083页10.5MB PDF。前一个链接只是关于双重否定的部分。)
关于双重否定,它有以下内容:
在英语中,双重否定往往被解释为肯定的陈述(例如,“在C源代码中出现双重否定并不罕见”)。在C中应用相同的语义。然而,在某些语言中(例如西班牙语),双重否定被解释为使陈述更加否定(这种用法确实在日常英语中出现,例如,“你还没有看到什么”,但这种用法很少且在社交场合中受到谴责1)。
我相信作者会很高兴知道这对回答你的真正问题没有任何用处(答案是肯定的)。
_Bool
类型和一个在stdbool.h
头文件中的bool
宏。 - Jens Gustedt