繁体   English   中英

访问64位整数的下半部分

[英]Accessing lower half of a 64bit integer

如何使用C或C ++访问64位整数的下半部分? 我可以在Assembly中轻松完成此操作,但对如何在C / C ++中执行操作一无所知

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

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

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

我以前使用过各种技巧来做到这一点。 使用工会,长班等。

如今,我只使用内存复制。 听起来效率低下,但是上次我检查了编译器,将代码优化的很好:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM