访问64位整数的下半部分

时间:2010-07-18 19:00:45

标签: c 64-bit integer

如何使用C或C ++访问64位整数的下半部分?我可以在汇编中轻松完成,但我不知道如何在C / C ++中完成它

编辑:访问上半部分怎么样?

2 个答案:

答案 0 :(得分:9)

long long BigOne = 0x1234567890ABCDEFLL;
long long LowerHalf = BigOne & 0xFFFFFFFFLL;
long long UpperHalf = (BigOne >> 32) & 0xFFFFFFFFLL;

很抱歉,如果十六进制文字需要一些前缀/后缀,我对C不是很熟悉。如果你知道,请修正答案。

答案 1 :(得分:-3)

之前我曾用过各种技巧。使用工会,长班等等。

现在我只使用memcopy。这可能听起来效率低下,但上次我检查编译器优化代码时非常好:

int32_t higher32 (unsigned long long arg)
{
  unsigned char * data = (unsigned char *) arg;
  int32_t result;
  memcpy (&result, data+4, sizeof (int32_t));
  return result;
}

int32_t lower32 (unsigned long long arg)
{
  unsigned char * data = (unsigned char *) arg;
  int32_t result;
  memcpy (&result, data+0, sizeof (int32_t));
  return result;
}