c++ - 这两个位运算符在做什么?

标签 c++ audio bit-manipulation operators

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

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

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

最佳答案

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

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

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

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

关于c++ - 这两个位运算符在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60480457/

相关文章:

c++ - 在 c++ 中为我的类设置/获取方法时遇到问题

objective-c - 在 objective-c 中将两个音频文件合并为一个

javascript - 在 Meteor 中集成 p5.sound.js : p5. AudioIn() 不是构造函数

.net - 如何清除 .NET 中文件的只读标志?

c++ - 一些中间位与模式匹配的下一个最大整数?

c++ - CMakeList.txt 中应该包含什么模块来进行近似最近邻搜索?

c++ - STL 映射错误 : no template named 'map' in namespace 'std' ; did you mean 'max' ?

c++ - 在 paintEvent 之后恢复 TextCursor

jquery - 使用音频标签设置循环之间的延迟

scala - Scala中的位字段