我正在对我的 Arduino 微控制器进行编程,并且我找到了一些用于接受加速度计传感器数据以供以后使用的代码。我可以理解除以下代码之外的所有内容。我想对正在发生的事情有一些直觉,但经过所有的搜索和阅读,我无法完全理解正在发生的事情并真正理解。
我上过一门 C++ 课程,但我们很少使用按位运算或位移或任何你喜欢的名称。让我试着解释一下我认为我理解的内容,你可以在需要的地方纠正我。
所以:
- 我认为我们在 x 中存储了一个值,事实上非常确定。
- 似乎数组“buff”中的数据,插槽号 1,被设置为整数数据类型。
- 插槽 1 中的值向左移动了 8 位。(这是否指向 buff 插槽 0?)
这个新值正在与 buff slot 0 中的数据进行比较,如果任一位为真,则存储在 x 中的数据中的位也将为真,因此,0 和 1 = 1、0 和 0 = 0 和 1 和 0 = 1 到底存储的值。
代码对所有三个轴执行此操作:x、y、z 但我不知道为什么......我需要帮助。在我进步之前,我希望得到充分的理解。
//each axis reading comes in 10 bit resolution, ie 2 bytes.
// Least Significant Byte first!!
//thus we are converting both bytes in to one int
x = (((int)buff[1]) << 8) | buff[0];
y = (((int)buff[3]) << 8) | buff[2];
z = (((int)buff[5]) << 8) | buff[4];