Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在一个字节中交换两个半字节_C++_Algorithm_Bit Manipulation - Fatal编程技术网

C++ 在一个字节中交换两个半字节

C++ 在一个字节中交换两个半字节,c++,algorithm,bit-manipulation,C++,Algorithm,Bit Manipulation,我正在尝试自己交换一个字节中的两个半字节。互联网上的解决方案似乎显而易见 ( (x & 0x0F)<<4 | (x & 0xF0)>>4 ) ((x&0x0F)4) 我知道上述解决方案是如何工作的。我自己试过,看起来像这样 (((0x0F<<4)&(n)) | (0x0F & (n>>4))) ((0x0F4))) 在第一个操作中:我试图向左移动11114个位置,然后用n移动&,以获得前四位 在第二个操作中:

我正在尝试自己交换一个字节中的两个半字节。互联网上的解决方案似乎显而易见

( (x & 0x0F)<<4 | (x & 0xF0)>>4 )
((x&0x0F)4)
我知道上述解决方案是如何工作的。我自己试过,看起来像这样

(((0x0F<<4)&(n)) | (0x0F & (n>>4)))
((0x0F4)))
在第一个操作中:我试图向左移动
1111
4个位置,然后用
n
移动
&
,以获得前四位

在第二个操作中:我试图将
n
4位向右移位,然后用
1111
&
移到最后四位

然后
给出最终答案


我的方法有什么问题?

考虑一个二进制数字:

abcdwxyz
当使用
((x&0x0F)4)
时:

(x&0x0F)4
给出
0000abcd

最后的答案是
wxyzabcd

当使用
((0x0F4))
时,
(0x0F4))
给出
0000abcd

所以最后的答案是
abcdabcd

相反,您可以尝试:

((0xF0 & (n<<4)) | (0x0F & (n>>4)))
((0xF0和(n4)))

您可以简化
0x0F谢谢!!!不知道你试过了吗?它起作用了吗?你的问题是什么?它不起作用。是的,我试过了。我不明白这个问题。您已经尝试过了,因此您知道有些输入没有得到正确的答案(例如:0x01)。为什么这个方法对这些数字不起作用?