C++学习——数据类型(强制)转换详解

有时,编程的过程中需要将值从一种数据类型转换为另一种数据类型。C++ 提供了这样做的方法。

如果将一个浮点值分配给一个 int 整型变量,该变量会接收什么值?如果一个 int 整数乘以一个 float 浮点数,结果将会是什么数据类型?如果一个 double 浮点数除以一个 unsigned int 无符号整数会怎么样?是否有办法预测在这些情况下会发生什么?

答案是肯定的。当运算符的操作数具有不同的数据类型时,C++ 会自动将它们转换为相同的数据类型。当它这样做时,遵循一组规则。理解这些规则将有助于程序员防止一些细微的错误蔓延到自己的程序中。

就像军队的军官有军阶一样,数据类型也可以按等级排名。如果一个数字数据类型可以容纳的数字大于另一个数据类型,那么它的排名就高于后者。例如,float 类型就超越了 int 类型,而 double 类型又超越了 float 类型。表 1 列出了从高到低排列的数据类型。

表 1 数据类型排名
| long double |
|–|–|
| double |
|floa
|unsigned long long int
|long long int
|unsigned long int
|long int
|unsigned int
|int

表 1 中排名的一个例外是当 int 和 long int 的大小相同时。在这种情况下,unsigned int 将超越 long int,因为它可以保存更高的值。

当 C++ 使用运算符时,它会努力将操作数转换为相同的类型。这种隐式或自动的转换称为类型强制。当一个值被转换为更髙的数据类型时,称之为升级。反之,降级则意味着将其转换为更低的数据类型。

现在来看一看管理数学表达式评估的具体规则:

规则 1:

char、short 和 unsigned short 值自动升级为 int 值。细心的读者可能已经注意到,char、short 和 unsigned short 都未出现在表 1 中,这是因为无论何时在数学表达式中使用这些数据类型的值,它们都将自动升级为 int 类型。

规则 2:

当运算符使用不同数据类型的两个值时,较低排名的值将被升级为较高排名值的类型。在下面的表达式中,假设 years 是一个 int 变量,而 interestRate 是一个 double 变量:
years * interestRate

在乘法发生之前,years 中的值将升级为 double 类型。

规则 3:

当表达式的最终值分配给变量时,它将被转换为该变量的数据类型。在下面的语句中,假设 area 是一个 long int 长整型变量,而 length 和 width 都是 int 整型变量:
area = length * width;

因为存储在 length 和 width 中的值是相同的数据类型,所以它们都不会被转换为任何其他数据类型。但是,乘法的结果将被升级为 long int 类型,这样才可以存储到 area 中。



但是,如果接收值的变量的数据类型低于接收的值,那该怎么办呢?在这种情况下,值将被降级为变量的类型。如果变量的数据类型没有足够的存储空间来保存该值,则该值的一部分将丢失,并且该变量可能会收到不准确的结果。

我们知道,如果接收值的变量想要的是一个整数,而赋给它的值是一个浮点数,那么当转换为 int 并存储在变量中时,浮点值将被截断。这意味着小数点后的所有内容都将被丢弃。示例如下:

int x;
double y = 3.75;
x = y; // x被赋值为3,y仍然保留3.75

但是,重要的是要了解,当变量值

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌宝儿姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值