【问题标题】:unexpected behaviour from conversion from long long to int从 long long 转换为 int 的意外行为
【发布时间】:2021-06-11 14:28:31
【问题描述】:

我正在使用 Windows 10 64 位的 VS2019。 我正在做一些尝试,我尝试了以下代码

int main() {
    unsigned long long ull = 70000;
    unsigned int ui = ull;
    std::cout << ui;
}

我希望得到不同于 70000 的输出,因为 70000 大于 int 变量可以存储的最大数字。那么为什么我得到70000 作为输出呢?这怎么可能?

【问题讨论】:

  • “70000 大于 int 变量可以存储的最大数字。” - 不知道您在哪里/如何得出结论,但显然它不可靠资源。检查 UINT_MAX 和/或 std::numeric_limits&lt;unsigned int&gt;::max()
  • cplusplus.com/reference/climits,我用这个网站检查 UINT_MAX 但我没有看到它认为 uint 是 16 位变量
  • 首先,使用cppreference.com。它可能是最好的有文档记录的语言网站。其次,您会发现它在&lt;climits&gt; 中定义,但对于c++,我强烈建议使用&lt;limits&gt; 并在您的代码中打印std::numeric_limits&lt;unsigned int&gt;::max()。它将为您提供正确的价值,您可以亲自查看您平台上unsigned int 的上限。即使在 cpluplus.com 上也清楚地显示“65535 (216-1) 或更大
  • 这里有一个更好的关于C++ fundamental types的页面。请注意,整数范围可能取决于系统。

标签: c++ casting


【解决方案1】:

32 位无符号整数可以存储从 0 到 4,294,967,295 的值。

【讨论】:

  • 整数大小是特定于平台的。你不能指望unsigned int 总是 16 位或总是 32 位。
猜你喜欢
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多