这里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/