如何在双人内部存放2个短裤和一个浮子?

时间:2018-01-26 23:03:24

标签: c

我碰巧有一个嵌入式程序,需要我做一些操作来存储更多信息。

我有两条短裤和一条漂浮物。我需要将它存储为双(64位),然后检索所有信息而不会损失该双精度。我只能使用C99有效操作,甚至无法进行双位移位。

short x = 4012; short y=1234; float s = 0.8;
double store = 0;

不幸的是,我不确定如何解决这个问题。

3 个答案:

答案 0 :(得分:5)

使用联盟:

union Foo {
  struct {
    short x;
    short y;
    float s;
  } ssf;
  double dbl;
};

int main() {
  union Foo v;
  v.ssf.x = 4012;
  v.ssf.y = 1234;
  v.ssf.s = 0.8f;

  // read a double
  double store = v.dbl;

  // set the double value
  v.dbl = store;

  // read the float back out
  printf("%f\n", v.ssf.s);

  return 0;
}

答案 1 :(得分:1)

如果你把你的短裤和浮子放在一个小块中,它将字面上是2个短裤和一个漂浮在连续记忆中。相同的内存占用。但是你不必操作位来访问和修改各个变量。可能使用结构实际上会保存内存,因为在与short和float交互时,不需要中间变量来放入CPU寄存器。此外,你会在你的小巧代码中发现大量潜在的错误。

答案 2 :(得分:1)

作为nemequ答案的补充,内部struct可以是匿名的,以避免不必要的打字:

union Foo {
  struct {
    short a;
    short b;
    float c;
  };
  double d;
};

int main() {
   union Foo foo;
   foo.a = 12;
   foo.c = 2.3f;
}