C中的双重否定:是否保证返回0/1?

时间:2011-12-23 14:18:01

标签: c standards

标准是否保证!!(x)返回0/1?

请注意,我询问c ++,其中定义了bool类型。

2 个答案:

答案 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)很少见,也不赞成。“

我相信作者会很高兴知道这在回答你的真实问题时毫无用处(答案是肯定的。)