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 中的按位运算符。
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
- https://www.programiz.com/java-programming/bitwise-operators
等等。
"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 或其他东西上找到它的。
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 中的按位运算符。
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
- https://www.programiz.com/java-programming/bitwise-operators
等等。
"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 或其他东西上找到它的。