我有标题的问题,但如果没有,我怎么能只使用4位表示整数呢?
编辑真的我的问题是如何。我知道像c这样的语言中有1个字节的数据结构,但我怎么能用char之类的东西来存储两个整数呢?答案 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位数字需要有符号,那么事情会变得有点复杂,因为在打包/解包时必须正确扩展符号。