如果两个函数都返回布尔值,使用按位运算符将它们组合起来是否安全?

杰森

假设我有两个可能有副作用的函数,并返回布尔值。(具有bool中的定义<stdbool.h>,因此定义bool_Bool类型)

bool tweedledee(MyState *pmystate);
bool tweedledum(MyState *pmystate);

使用按位运算符组合它们是否安全?

bool both_tweedles = tweedledee(&mystate) & tweedledum(&mystate);

或者

bool either_tweedle = tweedledee(&mystate) | tweedledum(&mystate);

我通常会使用逻辑运算符&&||; 我正在一个项目中,我的团队成员正在使用按位运算符,因为这些函数可能会产生副作用,并且我们希望两个函数都发生。(逻辑运算符正在短路。)

我唯一的保留意见是,我不确定是否bool可以安全地假定函数返回是否返回1和0,而不是将其作为替代值返回true


举个例子:如果邪恶的人按如下方式实施了该怎么办?

bool tweedledee(MyState *pmystate)
{
   return 66;
}

bool tweedledum(MyState *pmystate)
{
   return 33;
}

然后66 & 33是0,然后66 | 33是99。

詹姆斯德林

从C99标准的6.3.1.2/1节开始:

当将任何标量值转换为_Bool时,如果该值比较等于0,则结果为0;否则,结果为0;否则,结果为0。否则,结果为1。

如果您使用stdbool.h,则bool(这是定义为的预处理器宏_Bool)因此只能为0或1,tweedledee并且和tweedledum函数不能返回超出该范围的值,并且对它们使用按位运算应该可以实现您的期望。

然而,如果tweedledeetweedledum使用其他一些bool类型,是不是_Bool,那么所有的赌注都关闭。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用按位运算符交织2个布尔值?

来自分类Dev

如何使用按位运算符交织2个布尔值?

来自分类Dev

在布尔值上使用按位非运算符(〜)是否会调用未定义行为?

来自分类Dev

在 numpy 数组中查找“值接近”的 int 值并将它们组合起来

来自分类Dev

将 SQL 中的多条记录与每个布尔值的逻辑 OR 组合起来

来自分类Dev

如何从同一个 Keras 层获得不同的输出,然后将它们组合起来?

来自分类Dev

为什么在比较布尔值时,按位运算符比Java中的“正常”运算符要慢?

来自分类Dev

如果两个方法都尝试并最终返回布尔值,会发生什么情况

来自分类常见问题

为什么两个程序都一样工作?它是关于使用按位运算符查找奇数或偶数(C)

来自分类Dev

为什么两个程序都一样工作?它是关于使用按位运算符查找奇数或偶数(C)

来自分类Dev

返回布尔值 observable 的管道运算符

来自分类Dev

是否有布尔值的后赋值运算符?

来自分类Dev

要求用户键入两个二进制值并执行按位XOR运算符

来自分类Dev

内联NOT运算符,使用布尔值

来自分类Dev

布尔值的按位运算

来自分类Dev

Elasticsearch:将 cutoff_frequency 与 and 运算符结合起来?

来自分类Dev

是否可以使用两个Internet连接并将它们的上载组合为bittorrent?

来自分类Dev

是否有可能在单个div上将css中的两个线性梯度结合起来

来自分类Dev

如何在Python中收集一组布尔值并返回最终将“ AND”与“ AND”结合起来的最终测试?

来自分类Dev

将两个 SQL 查询与一个相同的列联合起来(使用 Eloquent)

来自分类Dev

如何在两个脚本中使用布尔值来决定是否调用函数?

来自分类Dev

如果在字符串上使用两个否定运算符,是否使用强制类型?

来自分类Dev

JQuery“OR”运算符组合两个变量

来自分类Dev

我可以将SpringEL的布尔值或运算符与Spring安全的@Preauthorize一起使用吗?

来自分类Dev

在检查两个节点之间是否存在关系之后,Cypher返回布尔值

来自分类Dev

当两个索引存在并排序时返回布尔值的函数?

来自分类Dev

如果在两个数字之间两次使用按位OR运算符。那将如何工作?

来自分类Dev

Python的in(__contains__)运算符返回布尔值,该布尔值既不是True也不是False

来自分类Dev

将两个python mysql查询与一个条件结合起来

Related 相关文章

  1. 1

    如何使用按位运算符交织2个布尔值?

  2. 2

    如何使用按位运算符交织2个布尔值?

  3. 3

    在布尔值上使用按位非运算符(〜)是否会调用未定义行为?

  4. 4

    在 numpy 数组中查找“值接近”的 int 值并将它们组合起来

  5. 5

    将 SQL 中的多条记录与每个布尔值的逻辑 OR 组合起来

  6. 6

    如何从同一个 Keras 层获得不同的输出,然后将它们组合起来?

  7. 7

    为什么在比较布尔值时,按位运算符比Java中的“正常”运算符要慢?

  8. 8

    如果两个方法都尝试并最终返回布尔值,会发生什么情况

  9. 9

    为什么两个程序都一样工作?它是关于使用按位运算符查找奇数或偶数(C)

  10. 10

    为什么两个程序都一样工作?它是关于使用按位运算符查找奇数或偶数(C)

  11. 11

    返回布尔值 observable 的管道运算符

  12. 12

    是否有布尔值的后赋值运算符?

  13. 13

    要求用户键入两个二进制值并执行按位XOR运算符

  14. 14

    内联NOT运算符,使用布尔值

  15. 15

    布尔值的按位运算

  16. 16

    Elasticsearch:将 cutoff_frequency 与 and 运算符结合起来?

  17. 17

    是否可以使用两个Internet连接并将它们的上载组合为bittorrent?

  18. 18

    是否有可能在单个div上将css中的两个线性梯度结合起来

  19. 19

    如何在Python中收集一组布尔值并返回最终将“ AND”与“ AND”结合起来的最终测试?

  20. 20

    将两个 SQL 查询与一个相同的列联合起来(使用 Eloquent)

  21. 21

    如何在两个脚本中使用布尔值来决定是否调用函数?

  22. 22

    如果在字符串上使用两个否定运算符,是否使用强制类型?

  23. 23

    JQuery“OR”运算符组合两个变量

  24. 24

    我可以将SpringEL的布尔值或运算符与Spring安全的@Preauthorize一起使用吗?

  25. 25

    在检查两个节点之间是否存在关系之后,Cypher返回布尔值

  26. 26

    当两个索引存在并排序时返回布尔值的函数?

  27. 27

    如果在两个数字之间两次使用按位OR运算符。那将如何工作?

  28. 28

    Python的in(__contains__)运算符返回布尔值,该布尔值既不是True也不是False

  29. 29

    将两个python mysql查询与一个条件结合起来

热门标签

归档