标准是否保证!!(x)
返回0/1?
请注意,我不询问c ++,其中定义了bool类型。
答案 0 :(得分:44)
是的,在C99中,见§6.5.3.3/ 4:
逻辑否定运算符的结果!如果其操作数的值进行比较,则 0 如果其操作数的值等于0,则不等于0, 1 。结果的类型为 int 。 表达式!E等价于(0 == E)。
所以!x
和!!y
只能产生0或1,因为int
s。
对于其他运营商,在C99中,另请参阅Is the "true" result of >, <, !, &&, || or == defined?
答案 1 :(得分:14)
这是一个评论,但它太长了。 (请不要仅仅在此基础上投票。)
我在寻找回答你问题的标准时发现了一个非常奇怪的文件:The New C Standard: An Economic and Cultural Commentary.他们说学术界资金不足。 (Here是完整的2083页10.5MB PDF。前一个链接只是关于双重否定的部分。)
在双重否定的主题上有这样的说法:“双重否定通常被解释为英语中的正面陈述(例如,”在C源中出现双重否定并不是未知的“)。在C语言中应用的语义。然而,在某些语言(例如西班牙语)中,双重否定被解释为使语句更加消极(这种用法确实发生在随意的英语演讲中,例如,“你还没有看到任何东西”,但是在社会上1)很少见,也不赞成。“
我相信作者会很高兴知道这在回答你的真实问题时毫无用处(答案是肯定的。)