C条件总是会返回1还是0?

trh*_*178 9 c standards conditional

C条件语句总是返回[1或0],还是返回[0或'除零以外的值'].我问因为:

伪代码 -

foo(address,shouldSend):
寄存器>> = 1
寄存器<< = 1 //清除第一个位置
寄存器中的位| = shouldSend //表示是否应该发送

如果有人在一个大于1的shouldSend值中传递了一个问题,那么就会出现问题(因为只有0是假的而其他所有都是真的,技术上这是有效的).因为我直接用寄存器OR发送shouldSend的真值,所以最好不要说0xFF!我已经有了一个解决方案,所以问题更多的是出于好奇的缘故.我想知道如果:

foo(address,shouldSend):
寄存器>> = 1
寄存器<< = 1 //清除第一个位置
寄存器中的位| = (shouldSend> 0) //表示是否应该发送

解决了这个问题?我认为现在传入的0xFF(或一般来说,大于1)的问题被C条件掩盖.但这只能保证IF C条件保证返回[0或1].

ps - 我也意识到它可能依赖于编译器,但是ansi标准对此有何看法?

Vla*_*mir 17

Standard指定结果始终为整数值等于0或1

6.5.8关系运算符

如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果是,则为0 false.92)结果的类型为int.

  • +1,非常令人惊讶的是它确实指定了这种行为。随着时间的推移,我只是假设规范更有可能说“返回 0 或随机掷骰子” (2认同)
  • 这导致了我在有标准之前使用过的习语:`!!somevalue`,它具有相同的真值,但现在保证恰好是 0 或 1。 (2认同)