gpt4 book ai didi

c++ - int 限制与 long 限制

转载 作者:太空宇宙 更新时间:2023-11-04 16:04:33 28 4
gpt4 key购买 nike

大家都知道,intlong小。

this MSDN link后面,我正在阅读以下内容:

INT_MIN (Minimum value for a variable of type int.)    –2147483648
INT_MAX (Maximum value for a variable of type int.) 2147483647

LONG_MIN (Minimum value for a variable of type long.) –2147483648
LONG_MAX (Maximum value for a variable of type long.) 2147483647

同样的资料可以查到here .

我一生都被骗过吗?如果不是它们可以容纳的值,intlong 之间有什么区别?怎么会?

最佳答案

您提到了 C++ 和 ASP.NET。两者非常不同。

就 C 和 C++ 规范而言,您对原始数据类型的唯一了解是它可以存储的最大值范围。为您的第一个惊喜做好准备 - int 对应的范围是 [-32767; 32767]。今天大多数人认为 int 是一个 32 位数字,但实际上它几乎只能保证能够存储 16 位数字的等效项。另请注意,范围不是更典型的 [-32768; 32767],因为 C 被设计为适用于各种平台的通用抽象机,包括不使用 2 的补码作为负数的平台。

因此,long 实际上是一种“32 位排序”数据类型也就不足为奇了。这并不意味着 Linux 上的 C++ 实现(long 通常使用 64 位数字)是错误的,但它确实意味着为 Linux 编写的 C++ 应用程序假定 long 是 64 位错误的。当然,将 C++ 应用程序移植到 Windows 时,这会很有趣。

要使用的标准 64 位整数类型是 long long,这是在 Windows 上声明 64 位整数的标准方式。

但是,.NET 不关心这些事情,因为它是根据自己的规范从头开始构建的——部分原因正是因为 C 和 C++ 的历史悠久。在 .NET 中,int 是 32 位整数,long 是 64 位整数,long 总是 大于 int。在 C 语言中,如果您使用 long(32 位)并在其中存储了 10 万亿之类的值,它有可能会起作用,因为您的 long 有可能实际上是一个 64 位数字,C 并不关心这种区别——这正是大多数 Linux C 和 C++ 编译器上发生的事情。由于出于性能原因定义类型,因此编译器使用 32 位数据类型来存储 8 位值是完全合法的(当您“优化性能”时请记住这一点 - 编译器是做自己的优化)。 .NET 仍然可以在没有的平台上运行,例如32 位 2 的补码整数,但运行时必须确保该类型可以容纳 32 位 2 的补码整数,即使这意味着采用下一个更大的类型(通常“浪费”两倍的内存)。

关于c++ - int 限制与 long 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37853811/

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