繁体   English   中英

简化 C 中的二进制和异或

[英]Simplify binary and and xor in C

有没有办法简化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;
}

是否有可能将二进制操作简化为一个,所以我不需要调用sensor_mask两次?

(~ALL_SENSORS & sensor_mask)怎么样?

好吧,如果你把这个(或至少类似的)代码放到这里 然后你可以看到优化的代码,例如 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 中所有不在sensor_mask中的ALL_SENSORS 你也可以通过~ALL_SENSORS & sensor_mask来做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM