bit-manipulation - 理解C中按位运算符的问题

标签 bit-manipulation

这里x是任何十进制数。这个表达是什么意思?

return ( (x & 0x0000FFFF)<<16 | (x & 0xFFFF0000)>>16 );

最佳答案

他们使用按位运算来操作变量 x,该变量被假定为 32 位类型,因此可能是整数。

(x & 0x0000FFFF )<< 16 | (x & 0xFFFF0000) >> 16 

让我们分解一下: (x & 0x0000FFFF) << 16 :将获取 X 中最后 2 个字节的值,并将它们向左位移 16,这将有效地将表达式 x 中的最后 2 个字节移动到前 2 个字节。

(x & 0xFFFF0000) >> 16 :将执行与第一个完全相反的操作,并将前 2 个字节移动到最后 2 个字节的位置。

更详细地说:(x & 0xFFFF0000 ) 产生前 2 个字节的值,因为 & 运算符只会匹配 1 到 1,否则会在位级别上产生 0,因为我们在位级别上只有 1。表达式 0xFFFF0000 中的前 2 个字节我们将得到前 2 个字节的值。移位运算符会将结果值向左/右移动 16 步,具体取决于 <> 运算符的方向。

| 运算符会将两个表达式合并为一个值,该值是前 2 个字节已成为最后 2 个字节的 x 值,反之亦然。

阐明操作的示例。

x = 0x12345678
(x & 0x0000FFFF) // will result in 0x00005678
0x0000FFFF << 16  //will result in 0x56780000
// The other parenthesis is doing the exact same but opposite. Which will result in 0x00001234
The final part of the expression will look like this: 
0x56780000 | 0x00001234 // which will result in 0x56781234

有关按位运算符及其效果的更多信息可以在此处找到:https://fresh2refresh.com/c-programming/c-operators-expressions/c-bit-wise-operators/

关于bit-manipulation - 理解C中按位运算符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57505690/

相关文章:

c# - 快速 : Set top 2 bits of int

java - 我可以执行哪些位掩码操作?

c++ - 如何设置整数的前三个字节?在 C++ 中

c - 按位运算给出不正确的结果

满足方程的按位变换算法

c - 生成位掩码的算法

c++ - 分析涉及按位运算和 2 的幂的算法?

c# - 在 C# 中将 int 转换为 4 字节的最快方法

python - 列表中的单个元素

Java 表达式等价