4.类型转换-自动转换和强制类型转换

每个数据都会有不同的类型,当不同的数据类型之间需要进行混合运算时一定会涉及类型转换这个问题。有以下两种转换的方法:

  1. 自动转换:由编译器系统自动完成,它遵循一定的规则。
  2. 强制转换:把表达式的运算结果强制转换成所需的数据类型

自动转换
注意事项:自动转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和类型)

  1. 占用内存字节数少的类型,向占用内存字节数多的类型转换,用来保证精度不降低。
  2. 转换方向:
    在这里插入图片描述

(1)当表达式出现了char、short、int、short int类型中的一种或者多种,没有其他类型了,参加运算的成员全部变成int类型参加运算,结果也为int类型

#include <stdio.h>

int main(void){

	printf("%d\n",3/2);
	return 0;
	
}

(2)当表达式中出现了带小数点的实数,参加运算的成员全部变成double类型的参加运算没,结果也是double型。

#include <stdio.h>

int main(void){
	
	printf("%lf\n",3.0/2);
	return 0;
}

在这里插入图片描述

(3)当表达式中有符号数和无符号数同时出现时,且表达式中无实数,参加运算的成员变成无符号数参加运算,其结果也是无符号数。

#include <stdio.h>

int main(void){
	
	int a = -2;
	unsigned int b = 1;
	
	if(a + b >0){
		
		printf("a+b >0\n");
	}
	else if(a + b <0){
		
		printf("a+b <0\n");
	}
	else{
		
	printf("a+b =0\n");
	}
	printf("a+b=%d",a+b);
	return 0;
}

在这里插入图片描述

解析
很多人以为,a=-2b=1,结果一定是执行a+b<0,但是编译结果为什么是a+b>0呢,因为当有符号数和无符号数运算时,编译器会将有符号数当中无符号数,故结果为a+b>0;
最后一个打印结果为a+b=-1是为什么呢?a+b的值在做运算时确实是正数,但是我们把它用%d打印的是有符号数,那么a+b=-1;

(4)在赋值语句中等号右边的类型自动转换为等号左边的类型。

#include <stdio.h>

int main(void){
	
	int a;
	float b = 1.1f;
	a = b;
	printf("a=%d\n",a);
	
	return 0;
}

在这里插入图片描述

强制转换
定义:通过类型转换运算符实现
功能:可以把表达式的运算结果强制转换成自己想要的类型
注意:类型说明符必须要有括号
使用方法:(类型说明符)(表达式)

#include <stdio.h>

int main(void){
	
	float a = 0;
	int b = 0;
	a = 1.1f;
	b = (int)a;
	printf("b = %d\n",b);
	
	return 0;
}

在这里插入图片描述
解析
通过强制转换,把float类型转换成int类型,赋值给b

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

依点_DW

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

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

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

打赏作者

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

抵扣说明:

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

余额充值