如何将long long转换为int工作?

时间:2015-10-30 12:47:02

标签: c++ integer type-conversion

例如,我有以下内容:

#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采用什么逻辑取值?

3 个答案:

答案 0 :(得分:9)

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

  

如果目标类型已签名,则该值不会更改,如果它可以在目标类型中表示(和   位域宽度); 否则,该值是实现定义的

(N4140中的4.7条款3)

所以你不得不问问谁提供你的实现他说的结果,C ++标准没有说明任何事情。

答案 1 :(得分:8)

  

通过什么逻辑b取这个值?

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

2346436346346346 in binary is:

0000000000001000 0101011000010010 0100100011101001 0111101101101010

1223261034 in binary is:
                                  0100100011101001 0111101101101010

答案 2 :(得分:2)

根据标准 4.7 \ p3积分转换[conv.integral] (强调我的)

  

如果目标类型已签名,则值可以保持不变   以目的地类型表示;否则,值是   实现定义