数据类型相关内容与强制类型转换

数据类型相关内容与强制类型转换

一个数字数据类型可以容纳的数字大于另一个数据类型,从上到下排序:

数据类型相关内容与强制类型转换_第1张图片       可以称越处于上方的,排名越高

 

在数学表达式中数据类型的自动转换规则:

规则 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

 

但是,重要的是要了解,当变量值的数据类型更改时,它不会影响变量本身。

 

!!警告,浮点变量可以容纳比整型变量更大的值范围(int整型是2^31,float是2^128,double是2^1024  !!!)。如果浮点值存储在整型变量中,并且整型变量的整数部分(即小数点前的部分)太大,则整型变量中将存储无效值。

你可能感兴趣的:(C语言学习,算法学习)