海南公司网站建设,福建永安建设局网站,网站建设规划设计方案,农家乐网站设计费用一种类型的数据转换为另一种类型的数据#xff0c;这种操作称为类型转换。
类型转换分为自动类型转换和强制类型转换。
自动类型转换
比如现在希望将一个 short 类型的数据转换为 int 类型的数据#xff1a;
#include stdio.hint main(){short s 10;// 直接将s的…一种类型的数据转换为另一种类型的数据这种操作称为类型转换。
类型转换分为自动类型转换和强制类型转换。
自动类型转换
比如现在希望将一个 short 类型的数据转换为 int 类型的数据
#include stdio.hint main(){short s 10;// 直接将s的值传递给i即可但是注意此时s和i的类型不同int i s;
}这里其实就是一种自动类型转换就是编译器隐式地进行的数据类型转换这种转换不需要编写者做什么直接写就行会自动进行转换操作。
如果使用一个比转换的类型最大值都还要大的值进行类型转换比如
#include stdio.hint main() {int a 511;// 最大127char b a;printf(%d, b);
}-1很明显 char 类型是无法容纳大于 127 的数据的因为只占一个字节。 而 int 占 4 个字节如果需要进行转换那么就只能丢掉前面的就只保留 char 所需要的那几位了所以这里得到的就是 -1
int 511 - 00000000 00000000 00000001 11111111
char - 11111111 - -1也可以将整数和小数类型的数据进行互相转换
#include stdio.hint main() {int a 99;double d a;printf(%f, d);
}99.000000这里需要注意的是小数类型在转换回整数类型时会丢失小数部分不是四舍五入是直接丢失小数
#include stdio.hint main() {double a 3.14;int b a;printf(%d, b);
}3除了赋值操作可以进行自动类型转换之外在运算中也会进行自动类型转换比如
#include stdio.hint main() {float a 2;int b 3;double c b / a;printf(%f, c);
}
1.500000如果参与运算的既有整数类型又有浮点类型结果为什么是浮点类型呢这是由于类型转换导致的。规则如下 不同的类型优先级不同根据长度而定 char和short类型在参与运算时一律转换为int再进行运算。 浮点类型默认按双精度进行计算所以就算有 float 类型也会转换为 double 类型参与计算。 当有一个更高优先级的类型和一个低优先级的类型同时参与运算时统一转换为高优先级运算。 int 和 long 参与运算那么 int 转换为 long 再算所以结果也是 long 类型 int 和double 参与运算那么先把 int 转换为 double 再算所以结果也是 double 类型。
强制类型转换
强制类型转换可以手动去指定类型格式如下
(强制转换类型) 变量、常量或表达式;
比如
#include stdio.hint main() {// 2.5是一个double类型的值但是可以强制转换为int类型赋值给a强制转换之后小数部分丢失int a (int) 2.5;printf(%d, a);
}2也可以对一个算式的结果进行类型转换
#include stdio.hint main() {double a 3.14;// 注意得括起来表示对整个算式的结果进行类型转换不然强制类型转换只对其之后紧跟着的变量生效int b (int) (a 2.8);printf(%d, b);
}
5在需要得到两个 int 相除之后带小数的结果时强制类型转换就显得很有用
#include stdio.hint main() {int a 10, b 4;// 不进行任何的类型转换int除以int结果仍然是int导致小数丢失double c a / b;// 对a进行强制类型转换现在是double和int计算根据上面自动类型转换规则后面的int自动转换为double结果也是double了这样就是正确的结果了double d (double) a / b;printf(不进行类型转换: %f, 进行类型转换: %f, c, d);
}合理地使用强制类型转换能够解决很多情况下的计算问题。