有没有办法在不使用long的情况下增加C ++中int的大小?

时间:2015-01-28 11:27:45

标签: c++

如果int的范围达到32768,那么我必须输入大约50000的值并使用它,我想输入而不使用long ,如果可能的话,也可以不使用类型转换。有没有办法做到这一点。 我希望数据类型仅保留为

6 个答案:

答案 0 :(得分:2)

任何内置类型在任何意义上都不能改变或扩展。你必须切换到另一种类型。

int类型具有以下requirements

  • 表示至少-32767至32767(16位)
  • 的范围
  • 至少与shortsizeof(short) <= sizeof(int)
  • 一样大

这意味着,严格来说(虽然大多数平台使用int至少32位),但您无法将值50000安全地存储在int中。

如果您需要保证范围,请使用int16_tint32_tint64_t。它们在标题<cstdint>中定义。语言或标准库中没有任意精度整数类型。

如果您只需要观察有效整数的范围,请使用标题<limits>

std::cout << std::numeric_limits<int>::min() << " to " << std::numeric_limits<int>::max() << "\n";

答案 1 :(得分:1)

想到了几种可能性。

  • @abcthomas有想法使用unsigned;由于您被限制为int,因此您可以将滥用 int视为未签名。这可能会奏效,虽然根据标准是UB(参见Integer overflow in C: standards and compilers)。
  • 使用两个整数。可能涉及编写自己的scanf和printf版本,但这不应该太难。但严格来说,你还没有扩大int的范围。
  • [长途使用] 因为必须使用int。
  • ,所以不可能
  • 您可以随时使用一些大号库。 可能也不允许。
  • 将数字保存在字符串中,并在字符串上以数字方式进行算术运算。 虽然没有使用int。

但是你永远都不能存储某些东西&gt; MAX_INT在int。

答案 2 :(得分:1)

不!


int取决于本机机器字,这实际上意味着它取决于3件事 - 处理器,操作系统和编译器。

唯一可以&#34;增加&#34; int foo;(不是long foo;,int不长)是:

  1. 您正在使用Turbo-C或传统的16位DOS编译器在现代计算机上进行编译,可能是因为您的大学要求您使用它,因为这是您的教授所知道的。切换编译器。如果您的教授坚持要您使用它,请切换大学。

  2. 您正在使用64位操作系统上的32位编译器进行编译。切换编译器。

  3. 64位计算机上有32位操作系统。重新安装64位操作系统。

  4. 您有32位处理器。买一台新电脑。

  5. 您有一个16位处理器。真的,买一台新电脑。

答案 3 :(得分:1)

您可以尝试使用unsigned int。它与int相同但具有正范围(如果你真的不想长时间使用)。

请参阅this了解数据类型范围

<强>建议: 您也可以考虑切换编译器。从你提到的int范围来看,似乎你使用的是16位编译器(可能是turbo c)。 16位编译器会将unsigned int范围限制为0-65536(2 ^ 16),并将int符号设置为-32,768到32,767。

答案 4 :(得分:0)

尝试将您的值(适合64位int)分成两个32位数据块,然后使用两个32位整数来存储它。不久前,我写了一些代码,帮助我将16位值分成8位值。如果稍微更改此代码,则可以将64位值分别分为两个32位值。

#define BYTE_T uint8_t
#define TWOBYTE_T uint16_t
#define LOWBYTE(x)          ((BYTE_T)x)
#define HIGHBYTE(x)         ((TWOBYTE_T)x >> 0x8)
#define BYTE_COMBINE(h, l)  (((BYTE_T)h << 0x8) + (BYTE_T)l)

我不知道这是否有用,因为它实际上并未回答您的原始问题,但至少您可以通过这种方式存储您的值,即使您的平台仅支持32位整数

答案 5 :(得分:0)

这是一个在int中实际存储值大于MAX_INT的想法。它基于这样的条件:只有很小的,已知数量的可能值。

你可以写一个压缩方法来计算类似于2字节哈希的东西。散列必须与已知的一组可能值具有双射(1:1)关系。这样你实际上存储值(以压缩形式)在int中,而不是像以前那样存储在字符串中,因此扩展了可能值的范围,代价是无法表示< em>该范围内的每个值。

散列算法取决于可能值的集合。作为一个简单的例子,我们假设可能的值是2 ^ 0,2 ^ 1,2 ^ 2 ... 2 ^ 32767。明显的哈希算法是将指数存储在int中。存储值4表示值16,5表示32,1000表示接近10 ^ 301等的数字。可以看到一个可以存储&#34; 16位int中非常大的数字;-)。当然,较少规则的集合需要更复杂的算法。