gpt4 book ai didi

c++ - cstdint 之外的数字类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:01 25 4
gpt4 key购买 nike

我一直在我的代码中定期使用 cstdint 的类型(例如 uint32_t),但现在它们不太符合我的需求,尤其是在模板方面。

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

与此相关,我是否可以包含一些其他 header (按优先顺序:标准、提升、其他)给我 128 位整数?看起来这个问题回答了这个特定部分:Fastest 128 bit integer library

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

最佳答案

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

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

如果您只想要从具有 N 位的每个基本类型到具有 2N 位的基本类型的映射,那么制作一个简单的元函数:

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

关于c++ - cstdint 之外的数字类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com