【问题标题】:How does converting long long to int work?将 long long 转换为 int 如何工作?
【发布时间】:2015-10-30 12:47:01
【问题描述】:

例如我有以下内容:

#include <iostream>

int main()
{
    long long a = 2346436346346346;

    int b = a;
    //int b = static_cast<int>(a) //same result

    std::cout << a << "\n" << b;

    std::cin.get();
}

输出:

2346436346346346
1223261034

b 采用什么逻辑?

【问题讨论】:

    标签: c++ integer type-conversion


    【解决方案1】:

    对有符号整数类型的溢出赋值的结果是实现定义的:

    如果目标类型是有符号的,如果它可以在目标类型中表示,则值不变(并且 位域宽度); 否则,该值由实现定义

    (N4140 中的 4.7 第 3 条)

    因此,您必须询问提供您的实现的人他们所说的结果是什么,C++ 标准对此没有任何说明。

    【讨论】:

      【解决方案2】:

      b 取值的逻辑是什么?

      它是实现定义的,在你的情况下,值被截断:

      2346436346346346 in binary is:
      
      0000000000001000 0101011000010010 0100100011101001 0111101101101010
      
      1223261034 in binary is:
                                        0100100011101001 0111101101101010
      

      【讨论】:

        【解决方案3】:

        根据标准4.7\p3 积分转​​换[conv.integral] (Emphasis Mine)

        如果目标类型是有符号的,如果可以,则值不变 以目的地类型表示;否则,值为 实现定义

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-13
          • 2020-11-21
          相关资源
          最近更新 更多