Android things - i2c - 如何设置单个位以及为什么我需要在我的 i2c 项目中使用 |=?

Android things - i2c - How to set a single bit and Why I need use |= in my i2c project?

public void setRegisterFlag(I2cDevice device, int address) throws IOException 
    // Read one register from slave
    byte value = device.readRegByte(address);
    // Set bit 6
    value |= 0x40;
    // Write the updated value back to slave
    device.writeRegByte(address, value);
}

我在上面的 android things i2c 指南中看到了这段代码:根据下面的 table 正确设置位 6 是 0x20 而不是 0x40。如何设置一个位?设置特定位而不是所有 8 位的重要性是什么?当我写入寄存器时?

"How to set a single bit?"

使用 | 运算符。

"Why I need use|= in my i2c project?"

因为这是设置位的简单方法。说真的,你需要阅读 Java 中的按位运算符。

等等。

"What is the importance of setting specific bits and not all 8 bits?"

它由您试图控制的硬件设备的指定行为决定。阅读设备手册/文档。

实际上,代码是将物理写入字节的所有 8 位。只是其中只有一个位会 changing.

"When I will write in registers?"

当您需要让设备做某事

时,您通常会写入寄存器

"According to the table below the correct to set bit 6 is 0x20 and not 0x40."

这取决于您是从零开始还是从一开始对位进行编号。 "table"(实际上是代码)是从 1 开始对位进行编号。这不是通常的位编号约定,这部分解释了为什么该答案获得 2 个反对票。 (提示:人们通常会对答案投反对票,因为它们具有误导性或错误性。您应该注意这一点并选择性阅读内容。)

如果您花时间阅读按位运算符,您应该能够理解 该代码。您应该始终尝试自己 理解代码 而不是盲目地假设它是正确的...因为您是在 Whosebug 或其他东西上找到它的。