繁体   English   中英

16位到10位转换码解释

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM