首页 > 解决方案 > 这两个位运算符在做什么?

问题描述

有人介意解释下面的表达式在做什么吗?

int someValue = (((buffer[position + 1] << 8) | buffer[position] & 0xff) << 16) 

我知道 buffer[position + 1] << 8 向左移动 8 位,而 buffer[position] & 0xff 基本上是在提取这 8 位,但是“或”(|)的作用是什么,为什么整个东西向左移动了 16 位?他们被抹杀了吗?提前致谢。

标签: c++audiobit-manipulationoperators

解决方案


基本上这是将两个字节转换为 16 位整数。这两个字节位于缓冲区 [位置] 和缓冲区 [位置 + 1]。

首先,位置 + 1 处的字节左移 8 位。其次,第一个字节的高位清零。

然后将这两个字节与按位或运算符组合。

然后到目前为止,这个数字被左移了 16 位,大概是为了在这个整数的较低部分放入另外 2 个字节。


推荐阅读