首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超出cstdint的数值类型

超出cstdint的数值类型
EN

Stack Overflow用户
提问于 2011-12-01 02:18:53
回答 1查看 278关注 0票数 4

我经常在代码中使用cstdint中的类型(比如uint32_t),但现在它们不太符合我的需要,特别是在模板方面。

有没有办法指定一个两倍于模板参数大小的整数类型?当向我的模板传递uint32_t时,我需要它为函数中的一个变量创建一个uint64_t。也许更困难的是,当传递一个uint64_t时,我需要它来创建一个'uint128_t‘。我可以使用一个包含两个模板参数的数组来实现这一点,但是我不能将该数组传递给其他模板函数。这是代码的一个性能关键部分(我正在做密码学)。

与此相关的是,有没有其他可以包含的头文件(按偏好顺序: standard、boost、other),可以提供128位整数?看起来这个问题回答了这个特殊的部分:Fastest 128 bit integer library

有没有办法指定我想要使用不大于特定大小的最大整数?此最大大小也是sizeof (T)的函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-01 02:31:57

“扩展算术”是C语言家族的一个缺点。没有办法获得处理器的整数溢出标志,因此没有可移植的方法来编写最优的128位整数类。

为了获得最佳性能(与其他加密库竞争),您可能需要一个内部带有自定义程序集的静态库。不幸的是,我不知道这样一个可移植的(广泛移植的)接口。

如果你只想要一个从N位的基本类型到2N位的基本类型的映射,那么做一个简单的元函数:

代码语言:javascript
复制
template< typename half >
struct double_bits;

template<>
struct double_bits< std::uint8_t >
    { typedef std::uint16_t type; };

template<>
struct double_bits< std::uint16_t >
    { typedef std::uint32_t type; };

template<>
struct double_bits< std::uint32_t >
    { typedef std::uint64_t type; };
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8330865

复制
相关文章

相似问题

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