【问题标题】:How to create a int with custom size in C++ or C [closed]如何在 C++ 或 C 中创建具有自定义大小的 int [关闭]
【发布时间】:2021-01-05 11:36:01
【问题描述】:

如何在 c/c++ 中创建具有自定义字节大小的类型?

  • 我想创建一个 128 或更多字节的 int
  • 我使用了 struct,但它只能在 1 到 32 个字节范围内创建
  • 我不想使用数组、向量或类似的东西
  • 我只想创建一个超过 128 字节的 int

【问题讨论】:

  • 使用自定义类型支持编写您自己的编译器。
  • 不,编译器绝对没有说有 32 个字节的限制,除非你使用的是一些古代恐龙的东西。
  • 我不想使用数组、向量或类似的东西 -- 那么你将使用什么魔法来创建不存在的东西,除非你写代码来做吗?该代码将以某种方式使用某种聚合,不是吗?
  • @احمدمحمودی想象一下你将如何在汇编中解决这个问题。在可以对大整数执行的操作方面,您必然会受到架构的限制。对它的操作必须将值分解为 CPU 可以容纳和迭代这些组件的较小值。这就是“缓慢”的 Bigint 库正在做的事情。组装速度不会快很多,因为最终限制在硬件级别。
  • @احمدمحمودی -- gmp 等库已经实现了您正在寻找的内容。

标签: c++ c memory


【解决方案1】:

我只想创建一个超过 128 字节的 int

您只是想要在您选择的语言中无法实现的东西。

根本不可能在这些语言中定义自定义整数类型。类(结构)是唯一可以定义的自定义类型(如果算上这些类型的别名)。

你可以用一个由较小整数组成的大数组来表示这种大整数。

我不想使用任何数组

那么你已经没有选择了。

...至少现在是这样。未来,如果类似n2472的提议被C++标准采纳,这可能成为可能。

在 asm 中,我们可以创建具有任何字节的任何类型,我只是问这个问题,我可以在 c++ 中使用 asm 来创建它吗?

如果你用汇编语言编写程序,那么你可以做任何你的汇编程序允许的事情。但是您不能在 asm 声明中将类型引入 C++。

【讨论】:

  • 在 asm 中我们可以创建具有任何字节的任何类型我只是问这个问题我可以在 c++ 中使用 asm 来创建它吗?
  • “那么你已经没有选择了。”技术上不正确; template <std::size_t S> struct BigInt { BigInt<S-1> next; std::byte data; }; template <> struct BigInt<1> { std::byte data; }; 在不使用数组的情况下几乎是任意数字。但是不只使用std::array<std::byte,S> 或者std::size_t[N] 是没有意义的。
  • @احمدمحمودی 你可以在 C++ 中做到这一点。您通过定义类来定义新类型,无需涉及组装。但是任何一个非常大的整数类型的合理实现都会以某种方式使用数组。因此,如果数组是不可能的,那么编写一个合理的大整数类型就变得非常困难了。
  • @FrançoisAndrieux 哦,哇。我什至不知道 asm 是一种标准声明 :D 事实上,如果有人使用这样的汇编程序,那么就可以用 C++ 编写他们的汇编程序。
  • @eerorika 我知道这一点,为此我已经问过了。
猜你喜欢
  • 2017-06-29
  • 2014-07-08
  • 1970-01-01
  • 2022-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多