将位存储在c中的整数值中

时间:2013-07-18 18:28:38

标签: c

考虑一个8位编译器,例如Turbo C,其中我们有一个大小的整数,比如说2个字,即16位或2个字节。我需要存储三个整数值。

整数1 | 0-3 | 2位(二进制00-11)

整数2 | 0-5 | 3位(二进制000-101)

Inetger 3 | 0-7 | 3位(000-111,二进制)

总的来说,我们只需要8位来存储所有这三个值。这意味着整数数据类型的单个变量具有足够的内存来容纳这些值。我需要 开发一个程序,它可以 - 最多 - 只使用两个整数数据类型的实例,第一个用于从标准输入设备扫描值表示键盘,第二个用于存储用户以三个整数形式输入的数据如上所述的变量,并通过从存储数据的第二个实例中删除它来打印它们。

1 个答案:

答案 0 :(得分:2)

使用位域:

union X{
  byte byteval;
  struct {
    byte piece1:3;
    byte piece2:3;
    byte piece3:2;
  } pieces;
};

然后你有透明的访问权限:

X a;
a.pieces.piece2=3;
a.byteval;

并且不必左右移动......将其留给编译器;)