什么0x01用C语言做吗?

时间:2019-04-05 08:09:44

标签: c

我今天在一些同事的代码中看到了类似的东西:

I2C1ADB1= (slave_read_address | 0x01);

这是什么? 0x01部分呢?它在位末尾是否以1结尾?

假设I2C1ADB1 = 0b00000000。如果我在上面的行中使用,新的I2C1ADB1是否为0b000000001?还会将位数从8增加到9吗?

3 个答案:

答案 0 :(得分:2)

'|'是C语言中的按位“或”运算符。它在两个值之间进行按位“或”运算并返回最终值。

I2C1ADB1= (slave_read_address | 0x01);

假定二进制的slave_read_address是0bxxxxxxxx,其中每个x是位值10。同样,二进制文件中的0x010x00000001

您知道,如果至少一个值是true (1),则OR会返回true (1)。否则返回false (0)

因此在上面的C行之后,I2C1ADB1将具有0bxxxxxxx1

操作员不会添加位。通常为“ |” (OR)运算符用于设置一组特定的位,而不会更改其他位。

答案 1 :(得分:1)

语句I2C1ADB1 = (slave_read_address | 0x01);slave_read_address的值存储到I2C1ADB1中,将低位强制为1

您的解释不正确,该值没有移位,没有附加任何附加位 。最低位被设置1

  • 0成为1
  • 1不变,
  • 2成为3
  • 3不变,
  • 4成为5

答案 2 :(得分:0)

因为在左边有一个变量,在右边有一个常数,结果是将变量中的常数设置为所有对应的1位。在这种情况下,您是对的:它设置了最后一位。没有计数增加!