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)。为什么这个方法对这些数字不起作用?