gpt4 book ai didi

c++ - 这个按位异或有什么意义?

转载 作者:行者123 更新时间:2023-11-30 02:32:41 25 4
gpt4 key购买 nike

我试图理解 arduino 库“虚拟线”,我遇到了这段代码:

static uint8_t vw_ptt_pin = 10;
static uint8_t vw_ptt_inverted = 0;

// ...

void vw_set_ptt_pin(uint8_t pin)
{
vw_ptt_pin = pin;
}

void vw_set_ptt_inverted(uint8_t inverted)
{
vw_ptt_inverted = inverted;
}

// ...

void vw_tx_start()
{
// ...
digitalWrite(vw_ptt_pin, true ^ vw_ptt_inverted);
// ...
}

void vw_tx_stop()
{
// ...
digitalWrite(vw_ptt_pin, false ^ vw_ptt_inverted);
// ...
}

我只是不明白他为什么使用 true ^ vw_ptt_invertedfalse ^ vw_ptt_inverted。此按位运算的输出(整数)与函数的输入类型( bool 值)不匹配。另外,0 ^ A 有什么意义? 0^A==A 不是吗?

最佳答案

通常vw_tx_start()输出1到端口,vw_tx_stop()输出0:

1 ^ 0 == 1
0 ^ 0 == 0

如果将 flag vw_ptt_inverted 设置为 1,vw_tx_start() 将输出 0 和 vw_tx_stop() 1:

1 ^ 1 == 0
1 ^ 0 == 1

尽管 vw_set_ptt_inverted() 应该接受 bool 类型或检查它的输入,但如果您将标志设置为任意数字,它将无法正常工作。

对于类型,在 C++ 中 boolean 可以隐式转换为 int(true => 1,false => 0),反之亦然(非零 => true,零 => false),因此 bool 常量转换为整数进行 xor操作,然后将结果整数按规则转换回 bool 值。

关于c++ - 这个按位异或有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com