作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解 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_inverted
和 false ^ 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/
我是一名优秀的程序员,十分优秀!