在char中省略前导0并追加

时间:2013-09-07 14:14:07

标签: c logic overflow bit-manipulation

说我有这8位字符:

01111111  00011100  01101111

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

11111110  01110011  01111000

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

非常感谢任何有关如何做到这一点的建议。欢呼声。

1 个答案:

答案 0 :(得分:3)

将第一个字符向上移1:

num[0] << 1;

这会将01111111变为11111110。现在你需要将LSB与下一个字符的MSB进行OR运算。要做到这一点,你需要转移下一个字符的副本:

char copy = num[1] >> 7; 

这会将01110011转换为00000000,因为它的高位为0.您现在可以将两者转为:

num[0] |= num[1];

哪个会给你你想要的东西。

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

请注意,正如chux指出的那样,最好使用 unsigned 类型来处理这类内容。