微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C 中简化二进制和和异或

如何解决在 C 中简化二进制和和异或

有没有办法简化PS1中的以下表达式?

C

用例是:

result = (constant & value) ^ value;

有没有可能将二元运算简化为一个,这样我就不需要调用 #define ALL_SENSORS = (BIT(0) + BIT(1) + BIT(2) + BIT(19)) # = 524295 static int get_invalid_sensors(int sensor_mask) { return (ALL_SENSORS & sensor_mask) ^ sensor_mask; } 两次了?

解决方法

(~ALL_SENSORS & sensor_mask) 怎么样?

,

好吧,如果您将此(或至少类似的)代码放入 here。然后你可以看到例如RISC-V的优化代码是

get_invalid_sensors: # @get_invalid_sensors
  not a0,a0
  and a0,a0,a1
  ret

由此您可以意识到,(~ALL_SENSORS & sensor_mask) 已经足够了。但是您也可以意识到编译器很可能无论如何都能优化您的代码。

,

表达式 (ALL_SENSORS & sensor_mask) ^ sensor_mask 的目标是屏蔽 sensor_mask 中所有不在 ALL_SENSORS 中的位。您也可以通过 ~ALL_SENSORS & sensor_mask 执行此操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。