首页 > 解决方案 > 如何反转移位和加法

问题描述

1E 1B 01 13 6 [ 0001 1110 0001 1011 0000 0001 0001 0011 0110 ]通过筛选和加法转换为F6C336。(0x1E<<19)+(0x1B<<14)+(0x01<<9)+(0x13<<4)+6 = F6C336[1111 0110 1100 0011 0011 0110]

现在,我不得不扭转这个计算。即从F6C336,我想得到1E 1B 01 13 6。

对不起,我对位操作的了解不足。

标签: bit-manipulationbitbit-shift

解决方案


如果这些是每个 5 位的四个块和一个每个 4 位的块,那么“转换”就是它们的串联,而相反的是将它分成这些块。例如:

piece0 = x >> 19;
piece1 = (x >> 14) & 31;
piece2 = (x >> 9) & 31;
piece3 = (x >> 4) & 31;
piece4 = x & 15;

此处以 Java 显示,但逻辑在大多数语言中是相似的。

如果输入不是那种形式,例如,如果是,FF FF FF FF F那么逆是模棱两可的。


推荐阅读