【发布时间】:2017-03-14 13:16:35
【问题描述】:
我有一些关于 C++ 中(隐式)类型转换的小问题。
1.浮动到整数
float f = 554344.76;
int x1 = f;
std::cout << x1 << std::endl;
打印554344(四舍五入或去除小数位),但用float f = 5543444.76; 替换它时,它打印5543445(四舍五入)。为什么在第一种情况下四舍五入,而在第二种情况下四舍五入?除此之外,对于更大的数字,它会产生完全奇怪的结果(例如,5543444675.76 变成了5543444480)。为什么?
int x1 = f; 和 long int x2 = f; 有什么区别?
2。长整型浮点数
long int li;
float x3 = li;
std::cout << x3 << std::endl;
一个练习的解决方案是对数值进行四舍五入,并导致大数字的值不正确。如果我尝试 long int li = 5435; 它不会向下舍入。还是long int li = 5435.56;向下取整的意思?其次,为什么它会导致大数的值不正确?我认为 long int 和 float 的位数相同。
3.字符加倍
char c = 130;
double x4 = c;
std::cout << x4 << std::endl;
为什么这会导致-126 而char c = 100; 提供正确的值?
4. int转char
int i = 200;
char x5 = i;
std::cout << x5 << std::endl;
这不打印任何内容(无输出)。为什么?我认为最多 255 的结果应该是正确的,因为 char 最多可以存储 255 的值。
【问题讨论】:
-
4.检查200的ASCII码..
-
2.如果将浮点初始化为 int ,它将忽略小数部分。
-
在 1. 我不明白“用 float f = 5543444.76; 替换它”。那是已经存在的。你换什么?
-
大约 1/ IEEE 754 32 位浮点数可以表示的 5,543,444.76 中最接近的数字是 5,543,445.0。见this IEEE 754 converter。
-
一般来说,你需要阅读浮点表示法。 Wikipedia 是一个好的开始。
标签: c++ type-conversion ieee-754