【发布时间】:2016-06-13 21:30:52
【问题描述】:
我正在尝试自己交换一个字节中的两个半字节。网上的解决方法好像很明显,就是
( (x & 0x0F)<<4 | (x & 0xF0)>>4 )
我知道上述解决方案的工作原理。我自己试过,看起来像这样
(((0x0F<<4)&(n)) | (0x0F & (n>>4)))
在第一个操作中:我试图将 1111 向左移动 4 个位置,然后将 & 与 n 一起移动以获得前四位。
在第二个操作中:我尝试将n 向右移动 4 位,然后将& 与1111 一起移动以获取最后四位。
然后OR给出最终答案。
我的方法有什么问题?
【问题讨论】:
-
您可以将
0x0F<<4简化为0xF0。 -
谢谢!!!不知道
-
你试过了吗?它在工作吗?你的问题到底是什么?
-
它不工作。是的,我试过了
-
我不明白这个问题。您已经尝试过了,所以您知道有些输入没有得到正确答案(例如:0x01)。您在哪里调试为什么该方法不适用于这些数字?
标签: c++ algorithm bit-manipulation