Dei*_*Dei 1 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();
}
Run Code Online (Sandbox Code Playgroud)
输出:
2346436346346346
1223261034
Run Code Online (Sandbox Code Playgroud)
通过什么逻辑确实b取得了这个价值?
对有符号整数类型的溢出赋值的结果是实现定义的:
如果目标类型已签名,则如果可以在目标类型(和位字段宽度)中表示该值,则该值不会更改; 否则,该值是实现定义的.
(N4140中的4.7条款3)
所以你不得不问问谁提供你的实现他说的结果,C++标准没有说明任何事情.
通过什么逻辑b取这个值?
它是实现定义的,在您的情况下,值被截断:
2346436346346346 in binary is:
0000000000001000 0101011000010010 0100100011101001 0111101101101010
1223261034 in binary is:
0100100011101001 0111101101101010
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |