如何在1字节的char中存储2个数字?

时间:2015-06-21 04:06:29

标签: c++ c binary fortran bcd

我有标题的问题,但如果没有,我怎么能只使用4位表示整数呢?

编辑真的我的问题是如何。我知道像c这样的语言中有1个字节的数据结构,但我怎么能用char之类的东西来存储两个整数呢?

2 个答案:

答案 0 :(得分:5)

在C或C ++中,您可以使用struct为变量分配所需的位数,如下所示:

#include <stdio.h>
struct packed {
    unsigned char a:4, b:4;
};
int main() {
    struct packed p;
    p.a = 10;
    p.b = 20;
    printf("p.a %d p.b %d size %ld\n", p.a, p.b, sizeof(struct packed));
    return 0;
}

输出为p.a 10 p.b 4 size 1,表明p只需要1个字节进行存储,超过4位(大于15)的数字会被截断,因此20(0x14)变为4。这比其他答案中使用的手动位移和屏蔽更简单,但它可能不会更快。

答案 1 :(得分:5)

您可以在一个字节中存储两个4位数字(称为b,这是一个无符号字符。)

使用十六进制很容易看出:在b=0xAE中,这两个数字分别为A和E.

使用面具隔离它们:

a = (b & 0xF0) >> 4

e = b & 0x0F

您可以轻松定义函数,以便在字节的适当部分设置/获取两个数字。

注意:如果4位数字需要有符号,那么事情会变得有点复杂,因为在打包/解包时必须正确扩展符号。