首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个32位整数组合成一个64位整数。

将两个32位整数组合成一个64位整数。
EN

Code Review用户
提问于 2011-05-25 16:24:31
回答 1查看 10.5K关注 0票数 8
代码语言:javascript
复制
long long combine(unsigned int high, unsigned int low) {
    return ((unsigned long long) high) << 32 || low;
}
  1. 这次行动有更好的名字吗?
  2. unsigned long longlong long的隐式转换是否是reinterpret_cast,或者如果unsigned数对于signed数据类型太大会发生什么?
EN

回答 1

Code Review用户

回答已采纳

发布于 2011-05-25 17:47:51

您应该返回unsigned long long并让用户决定他们想要对强制转换做什么,特别是如果您希望它是通用的。

我更喜欢像u32tou64uinttoull这样的名字,或者比组合更具有描述性的名字。不过,这在很大程度上取决于您自己的命名标准。

另外,我会考虑更迂腐:

代码语言:javascript
复制
return (((uint64_t) high) << 32) | ((uint64_t) low);

这不太可能产生影响,因为代码与您的代码本质上是相同的,但是它更容易阅读,并且避免了非常罕见(但调试非常麻烦)的转换问题。如果编译器不支持这种类型表示法,则可能需要自定义类型头。

同时,考虑让它成为一个宏。将其作为一个函数并没有什么好处--操作本身将比函数调用设置、调用和返回花费更少的时间,因此宏的性能将更高。此外,它不会占用比函数调用更多的程序空间,因此留给它一个真正的函数几乎没有什么好处。

票数 10
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/2607

复制
相关文章

相似问题

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