首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分long long

拆分long long
EN

Stack Overflow用户
提问于 2011-04-13 01:27:26
回答 4查看 2.6K关注 0票数 3

一个人如何“拆分”,即long long类型,这样它的第一部分是long类型的变量,第二部分也是long类型的变量。

代码语言:javascript
复制
long long long_type = 0xaaaabbbbccccdddd;

在第一个变量中,我希望得到long_type变量的前半部分(不管是哪边的),第二个变量是第二个变量,第二个变量是第二个变量。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-13 01:40:26

你的问题模棱两可。这取决于你说的“拆分”是什么意思。您可以拆分原始long long的值表示,也可以拆分long long的对象表示。

如果你想拆分数值表示,那么你的问题就更加模糊了,因为你的原始值是有符号的。您打算如何拆分有符号的值?你期望什么样的结果?签名?没有签名?高位部分有符号,低位部分无符号?还是别的什么?

对于无符号值,它将如下所示(假设收件人类型long具有适合您的目的的大小)

代码语言:javascript
复制
unsigned long long long_type = ...;

unsigned long hi = long_type / ULONG_MAX;
unsigned long lo = long_type;

如果你想拆分对象表示,正确的方法是使用memcpy (在这种情况下,原始值的符号并不重要)

代码语言:javascript
复制
long long long_type = ...;

unsigned long hi, lo;

memcpy(&lo, &long_type, sizeof lo);
memcpy(&hi, (char *) &long_type + sizeof lo, sizeof hi);

当然,在这种情况下,哪个部分实际上是低阶部分,哪个部分是高阶部分将取决于平台。

票数 6
EN

Stack Overflow用户

发布于 2011-04-13 01:30:09

我推荐使用uint32_t和uint64_t或其他固定宽度类型。

然后使用位操作来拆分它,如下所示:

代码语言:javascript
复制
uint64_t long_type = smthng;
uint32_t high = (long_type & 0xFFFFFFFF00000000ULL) >> 32;
uint32_t low = long_type & 0xFFFFFFFF;
票数 5
EN

Stack Overflow用户

发布于 2011-04-13 01:29:05

代码语言:javascript
复制
long a = long_type;
long b = (static_cast<unsigned long long>(long_type) >> 32);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5639210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档