如何将一个字节的前n位与另一个字节的最后8-n位合并?
我知道类似于下面的东西从第一个中选择3位,从第二个中选择5个(我在DES加密算法中观察到)
zByte=(xByte & 0xE0) | (yByte & 0x1F);
但我不知道数学背后为什么我们需要在这种情况下使用0XE0和0X1F.所以我试图了解每一位的细节.
在C#中,这将是这样的:
int mask = ~((-1) << n);
var result = (x & ~mask) | (y & mask);
Run Code Online (Sandbox Code Playgroud)
即我们构建一个(对于n = 5):的掩码000....0011111,然后我们将&一个操作数与该掩码组合(),另一个操作数与掩码的inverse(~)组合,并组合它们(|).
您也可以使用移位操作(完全避免使用掩码)更快地执行某些操作 - 但前提是数据可以被视为unsigned(因此Java可能会在这里遇到困难).
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |