隐式类型转换

您所在的位置:网站首页 c语言强制转换例子 隐式类型转换

隐式类型转换

2023-05-30 15:53| 来源: 网络整理| 查看: 265

目录

 

前言

一、赋值转换

二、运算转换

2.1 - 整型提升

 

前言

在 C 语言中,类型转换的方式一般可分为隐式类型转换和显示类型转换(也称为强制类型转换)。其中隐式类型转换由编译器自动进行,不需要程序员干预。

隐式类型转换通常有两种情况:赋值转换和运算转换。

 

一、赋值转换

将一种类型的数据赋值给另外一种类型的变量时,发生隐式类型转换。例如:

double pi = 3.14; int num = pi;

在对变量赋值时,若等号两边的数据类型不同,需要把右边表达式的类型转换为左边变量的类型,这可能导致数据失真(精度降低),所以隐式类型转换不一定安全。  

 

二、运算转换

C 语言中不同类型的数据需要转换成同一类型,才可以计算。转换规则如下:

转换按照数据长度增加的方向进行,以保证精度不降低。比如 int 类型的数据和 double 类型的数据相加时,int 类型的数据就会被隐式地转换成 double 类型,然后再进行运算。

如果两种类型的字节数一样,且一种有符号,另一种无符号,则转换成无符号类型。

char 类型和 short 类型参与运算时,必须先转换成 int 类型(整型提升)。

示例:

#include int main() { int num = -1; printf("%d\n", sizeof(num)); // 4 if (num < sizeof(num)) printf("num < sizeof(num)\n"); else printf("num >= sizeof(num)\n"); return 0; }

输出结果:num >= sizeof(num),这是因为 num 的类型是 int,而 sizeof(num) 的返回值类型是 unsigned int,因此在比较运算中,num 被隐式地转换成了 unsigned int。

 

2.1 - 整型提升

整型提升(integral promotion)是 C 程序设计语言中的一项规定:在表达式计算时,各种整型首先要提升为 int 类型,如果 int 类型不足以表示,则要提升为 unsigned int 类型,然后执行表达式的运算。例如,C 语言标准中仅规定了 char 的长度



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3