mbq*_*mbq 19 c logical-operators
例如,当我7>1用C语言写入时(如果这不是一直是特征,则说是C99),我可以期望结果恰好是1还是只有一些非零值?这适用于所有bool运营商吗?
Mat*_*Mat 35
在C99§6.5.8关系运算符,项目6( ,,< 和):><=>=
如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果是,则为0 false)结果的类型为int.
至于相等运算符,它在§6.5.9(==和!=)中更进一步:
==(等于)和!=(不等于)运算符类似于关系运算符,除了它们的优先级较低)如果指定的关系为真,则每个运算符产生1,如果为假,则产生0.结果是int类型.对于任何一对操作数,其中一个关系是正确的.
在§6.5.13(&&)中,逻辑AND和逻辑OR还有一点点了
如果&&运算符的两个操作数都不等于0,则它将产生1 ; 否则,它产生0.结果是int类型.
......和§6.5.14(||)
|| 如果操作数的任何一个比较不等于0,则运算符应该为1 ; 否则,它产生0.结果是int类型.
一元算术运算符的语义!结束于§6.5.3.3/ 4:
逻辑否定运算符的结果!是0,如果它的操作数的值不相等的比较为0,1,如果其操作数的值进行比较等于0.结果具有类型INT.表达式!E等价于(0 == E).
结果类型是int全线,以0和1作为可能的值.(除非我错过了一些.)
根据ISO C99标准,第6.5.8节:
6如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果指定的关系为0则为0是假的.结果是int类型.
从6.5.9节:
3 ==(等于)和!=(不等于)运算符类似于关系运算符,除了它们的优先级较低.如果指定的关系为真,则每个运算符产生1,如果为假,则产生0.结果是int类型.对于任何一对操作数,其中一个关系是正确的.
逻辑结合(&&)和disjunction(||)运算符也会发生同样的事情.
PS:顺便说一句,这就是为什么按位运算符(&和|)通常可以用作逻辑运算符的非短路版本.