相关疑难解决方法(0)

标准委员会关心的异域架构

我知道C和C++标准留下了语言实现的许多方面 - 仅仅因为如果存在具有其他特征的体系结构,那么为它编写符合标准的编译器是非常困难或不可能的.

我知道40年前任何电脑都有自己独特的规格.但是,我不知道今天使用的任何架构:

  • CHAR_BIT != 8
  • signed 不是两个补充(我听说Java有这个问题).
  • 浮点不符合IEEE 754(编辑:我的意思是"不是IEEE 754二进制编码").

我问的原因是我经常向人们解释C++不强制要求任何其他低级方面如固定大小的类型.这很好,因为与其他语言不同,它使你的代码在正确使用时可以移植(编辑:因为它可以移植到更多架构而不需要模拟机器的低级方面,例如符号+幅度架构上的二进制补码算法) .但我感到很难过,我自己也无法指出任何特定的架构.

所以问题是:哪些架构具有上述属性?

uint*_ts是可选的.

c c++ architecture

149
推荐指数
7
解决办法
1万
查看次数

为什么首选uint32_t而不是uint_fast32_t?

它似乎uint32_tuint_fast32_t(我意识到这是轶事证据)更普遍.但这对我来说似乎是违反直觉的.

几乎总是当我看到一个实现使用时uint32_t,它真正想要的是一个整数,它可以容纳高达4,294,967,295的值(通常在65,535和4,294,967,295之间的某个更低的界限).

这似乎很奇怪uint32_t,因为不需要"正好32位"保证,并且"最快可用> = 32位"保证uint_fast32_t似乎是正确的想法.而且,虽然它通常是实现的,uint32_t但实际上并不能保证存在.

那么,为什么会更uint32_t受青睐?是简单地知道还是比其他技术有优势?

c c++ int

79
推荐指数
8
解决办法
8183
查看次数

stdint.h和inttypes.h之间的区别

stdint.h和inttypes.h有什么区别?

如果没有使用它们,则无法识别uint64_t,但使用其中任何一个都是定义的类型.

c uint64 stdint

68
推荐指数
2
解决办法
3万
查看次数

我应该在计算它们的位运算之前将我的整数截断为短路吗?

假设我有一个按位表达式f: int -> int,它只依赖于输入的两个最低字节.在一般情况下,这将是任何更快的计算(uint32)f'((uint16)x),在那里f': short -> short?或者转换涉及开销?假设f编译器过于复杂,无法自行解决这个问题.

c optimization performance x86 bit-manipulation

5
推荐指数
2
解决办法
159
查看次数

如何快速将一个大整数分成一个单词?

我目前正在开发一个类来处理大的无符号整数。但是,我需要不完整的功能,即:

\n
    \n
  1. bi_uint+=bi_uint- 已经实施。没什么好抱怨的。
  2. \n
  3. bi_uint*=std::uint_fast64_t- 已经实施。没什么好抱怨的。
  4. \n
  5. bi_uint/=std::uint_fast64_t- 已实现,但工作速度非常,还需要两倍宽的类型uint_fast64_t。在测试用例中,除法比乘法慢35倍
  6. \n
\n

接下来,我将给出我的除法实现,它基于一个简单的长除法算法:

\n
#include <climits>\n#include <cstdint>\n#include <limits>\n#include <vector>\n\nclass bi_uint\n{\npublic:\n    using u64_t = std::uint_fast64_t;\n    constexpr static std::size_t u64_bits = CHAR_BIT * sizeof(u64_t);\n    using u128_t = unsigned __int128;\n    static_assert(sizeof(u128_t) >= sizeof(u64_t) * 2);\n\n    //little-endian\n    std::vector<u64_t> data;\n\n    //User should guarantee data.size()>0 and val>0\n    void self_div(const u64_t val)\n    {\n        auto it = data.rbegin();\n\n        if(data.size() == 1) {\n            *it /= val;\n            return;\n        }    \n        \n …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm biginteger integer-division c++20

5
推荐指数
1
解决办法
549
查看次数

什么是打印 int_fast_32_t 等数据类型的可移植和正确方法

我一直在阅读这篇文章,并且怀疑打印此数据类型的正确且可移植的方法是什么?

uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t    
Run Code Online (Sandbox Code Playgroud)

也签了。

c

2
推荐指数
1
解决办法
168
查看次数