有人能给我解释一下这行代码吗
Can someone please explain this line of code to me?
我正在从加速度计中读取值,并将它们保存在一个名为"values"的缓冲区中。每个加速度计读数都是10位长,但这些值是以字节的形式读取的,所以每个加速度计的读数实际上是两个字节或"值"缓冲区中的两个值。这是关于如何组合这两个字节以获得一个值的示例代码:
x = ((int)values[1]<<8)|(int)values[0];
我得到的是,我正在组合值[1]和值[2],我很确定(int)部分是将这些部分类型转换为整数(尽管我不确定为什么)。让我真正困惑的部分是<<8
和竖条|
。这两部分在做什么?
感谢您的解释和帮助!
这是一个位掩码。
您是left shifting (<<)
,values[1]
中的值乘以8
的位位置。然后CCD_ 6将其转换为CCD_。
请接受一些价值观,并努力克服它们。你会更好地理解它的。
这里有一个链接,可以获得更多的阅读和位操作示例。
这行代码将两个字符组合成一个int,第一个字符移动8位。
例如,值[0]=5,值[1]=1,则读入值应为128+5=133。因为高字节1意味着128。另一种看待它的方式是:
x = ((int)values[1]<<8) + (int)values[0];
将或替换为+,它将更具可读性。希望这能有所帮助。
以二进制0101010111
的10位读取为例。
较低的8位进入二进制(=87十进制)的values[0] = 01010111
。
较高的2个比特进入CCD_ 10。
从values
:恢复原来的10位数字
(int)values[1] << 8 --> 01 << 8 --> 0100000000
CCD_ 12被转换为int(通常为32位),然后向左移位CCD_ 13 8位。
((int)values[1]<<8) | (int)values[0] --> 0100000000 | 01010111
或以垂直表示法来表示按位或:
0100000000
| 01010111
------------
0101010111
QED
<操作员将第二字节中的位向左移位8位,因此例如0000000011111111变为1111111100000000。|是二进制"或"运算符,如果其中一位或两位都为1,则将每个位置的两位组合为1。
您有2个字节(1个字节=8个比特),并且您正在尝试读取10个比特的值,这就是为什么您需要2个字节而不是仅使用1。当你读取值时,你需要将2个字节强制转换为int,这样你就可以像对待整数值一样对待它们,但有一个问题,如果value[1]
是3个(00000011)
,下一个字节value[0]
是227个(11100011)
,如果你将它们相加,你就可以得到正确的读数,所以你需要将value[1]
左移8位。
当你将一个无符号的char/char/字节位移8时,你会得到0,所以你需要将value[1]
和value[0]
都强制转换为int,所以当你进行位移时,你最终会得到768个(00000011 00000000)
,现在你是|
,而不是value [0]
,最后你会得到
(00000011 00000000 | 00000000 11100011) = (00000011 11100011) = 995
注意,我只使用了16位int,所以这个例子并没有充满一堆0。
如果您可以访问编程计算器,它可以帮助您理解为什么需要将这些字节值强制转换为int,它也可以帮助您进行一般的强制转换。如果你可以访问windows Calculator应用程序,我建议你玩一玩它。为了让它进入程序员视图,请转到查看->程序员。
- 有人能为我解释一下C++代码吗
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 有人可以解释一下这段代码如何能够反转字符串
- 有人可以向我解释一下这段代码的作用吗?
- 任何人都可以解释一下我是否需要 & 在第一个代码片段中
- 我不完全确定此代码的行为.有人可以向我解释一下吗?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 有人能给我解释一下下面的模板代码吗
- C++指向对象的指针堆数组中,如何将字符串传递给特定对象?有一些代码请看一下:
- 在给定的代码中,有人可以解释一下(int i = 0; i<len; i++)count[str[i]]++的代码片段;
- 谁能解释一下这个BFS代码是如何工作的?
- 有人可以解释一下'sizeof'在此代码中返回的结果吗
- 谁能解释一下C++中关于cin.tie()的代码?
- 谁能解释一下上面的代码是如何工作的以及使用哪个概念
- 有人可以向我解释一下这段代码是如何工作的吗?(程序在预期数值且用户输入其他输入时再次要求用户输入)
- 有人可以解释一下这个 c++ 代码的作用吗?结构有问题
- 有人可以解释一下这个 c++ 代码的区别吗?
- C++代码的意外输出.有人可以解释一下
- 有人能给我解释一下这行代码吗
- 谁能给我解释一下代码的这一部分吗