2

假设我有这些 8 位字符:

01111111  00011100  01101111

我想省略前导 0 并在 char 之前附加位,如下所示:

11111110  01110011  01111000

*请注意,最后一个字符已用零填充。

任何有关如何做到这一点的建议将不胜感激。干杯。

4

1 回答 1

3

将第一个字符上移 1:

num[0] << 1;

这将01111111变成11111110. 现在您需要将 LSB 与下一个字符的 MSB 进行或运算。为此,您需要下一个字符的移动副本:

char copy = num[1] >> 7; 

这将01110011变成00000000,因为它的高位为 0。您现在可以 OR 两者:

num[0] |= num[1];

这会给你你想要的。

要对序列执行此操作,您需要循环并将每次迭代的班次增加到 8,然后重置。

请注意,正如 chux 指出的那样,您最好对此类内容使用无符号类型。

于 2013-09-07T14:21:22.493 回答