这x是任何十进制数。这个表达是什么意思?
return ( (x & 0x0000FFFF)<<16 | (x & 0xFFFF0000)>>16 );
Run Code Online (Sandbox Code Playgroud)
他们使用按位运算来操作变量 x,该变量被假定为 32 位类型,因此可能是整数。
(x & 0x0000FFFF )<< 16 | (x & 0xFFFF0000) >> 16
Run Code Online (Sandbox Code Playgroud)
让我们分解一下:
(x & 0x0000FFFF) << 16: 将获取 X 中最后 2 个字节的值,并将它们向左位移 16,这将有效地将表达式 x 中的最后 2 个字节移动到前 2 个字节。
(x & 0xFFFF0000) >> 16:将执行与第一个完全相反的操作,并将前 2 个字节移动到最后 2 个字节的位置。
更详细地说:这(x & 0xFFFF0000 )会导致前 2 个字节的值,因为 & 运算符只会匹配 1 到 1,否则会在位级别上产生 0,因为我们在前 2 个字节中只有位级别的值表达式 0xFFFF0000 我们将得到前 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
Run Code Online (Sandbox Code Playgroud)
有关按位运算符及其效果的更多信息可以在这里找到:https ://fresh2refresh.com/c-programming/c-operators-expressions/c-bit-wise-operators/