[英]16-bit to 10-bit conversion code explanation
我遇到了以下代码将 16 位数字转换为 10 位数字并将其存储在一个整数中。 任何人都可以向我解释AND 0x03究竟发生了什么?
// Convert the data to 10-bits
int xAccl = (((data[1] & 0x03) * 256) + data[0]);
if(xAccl > 511) {
xAccl -= 1024;
}
链接到我获得代码的地方: https : //www.instructables.com/id/Measurement-of-Acceleration-Using-ADXL345-and-Ardu/
按位运算符&
将制作一个掩码,因此在这种情况下,它会使整数的最高 6 位无效。
基本上,此代码执行模% 1024
(对于无符号值)。
data[1]
取第二个字节; & 0x03
用二进制11
屏蔽该字节 - 所以:需要 2 位; * 256
与<< 8
相同 - 即将这 2 位推入第 9 位和第 10 位; 将data[0]
添加到 data 结合了这两个字节(我个人会使用|
,而不是+
)。
所以; xAccl
现在是前 10 位,使用大端排序。
> 511
似乎是一个符号检查; 本质上,它是说“如果设置了第 10 位,则将整个事物视为负整数,就像我们使用了 10 位二进制补码规则一样”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.