CCF中学生计算机程序设计入门-06C++数据类型转换

更多资源请关注纽扣编程微信公众号
在这里插入图片描述

1 数据类型转换

在C++中,数据类型转换(也称为类型转换)是将一种数据类型的值转换为另一种数据类型的过程

例如为了保持小数可以将整形转换为浮点型

int a=5;
float b=a;//隐式地将int转换float

数据类型转换有自动类型转换和强制类型转换转换2种

2 自动类型转换

1) 自动类型转换 往数据类型长的方向转换 保证精度不丢失
比如 int和long long 运算会转换成long long

#include<iostream>
using namespace std;
/*
自动类型转换 往数据类型长的方向转换 保证精度不丢失 
比如 int和long long 运算会转换成long long 
*/
int main(){
	int a=4;
	long long b=9;
	
	cout<<"a占用字节数: "<<sizeof(a)<<endl;//整形4个字节 
	cout<<"b占用字节数: "<<sizeof(b)<<endl;//长整形8个字节 
	cout<<"a+b占用字节数: "<<sizeof(a+b)<<endl; //长整形8个字节
	return 0;
}

运行结果

2) 赋值运算

在赋值运算中,赋值号两边的数据类型不相同时,把右边表达式的值的类型转换为左边变量的类型,如果把右边表达式的值数据类型长度比左边长,将丢失一部分数据

#include<iostream>
using namespace std;

int main(){
	double d = 123.45;  
	int i = d; // i现在是123,小数部分被丢弃
	cout<<"整型i的值为: "<<i<<endl; 
	return 0;
}

运行结果

3 强制类型转换

当自动类型转换不能转换时,可以显示进行类型转换,称强制类型转换

强制类型转换可以对变量进行强制类型转换和对表达式进行强制类型转换

1) 变量强制类型转换

(类型名) 变量名

int a=10;
long long b= (long long ) a;//把变量a的类型从int强制转换成long long

示例1

#include<iostream>
using namespace std;
/*
  求2个数之和 
*/
int main(){
	int a=2147483647;
	int b=10;
	long long c= (long long ) a + b;//把a的类型从int转换成long long 
    cout<<c<<endl;//c的结果为2147483657
	return 0;
}

运行结果

思考

如果不进行数据转换会如何?

2) 表达式强制类型转换

(类型名) (表达式)

示例2

#include<iostream>
using namespace std;
/*
  对表达式进行类型转换
   	float a=2.4;
	float b=3.3;
	(int)(a+b)
	a+b=5.7,然后把5.7转化为int 向下取整为5 
*/
int main(){
	float a=2.4;
	float b=3.3;
	int c=2;
	int d= (int)(a+b)+c;//5+2=7
	cout<<"d的值为:"<<d<<endl;//输出d的值 
	return 0;
}

运行结果

4 字符型和整形的转换

字符存放到内存不是存放字符本身,而是存放字符对应的ASCII码,具体ASCII可以参考拓展的ASCII码表

常用字符的ASCII码 ,A的ASCII码65,a的ASCII码97,0的ASCII码48

1) 字符赋值整形

#include<iostream>
using namespace std;
/*
  字符赋值给整形 
*/
int main(){
	int p='a';
	int q='A';
	int e='0';
	cout<<"a的ASCII码为: "<<p<<endl;//a的ASCII码为97
	cout<<"A的ASCII码为: "<<q<<endl;//A的ASCII码为65
	cout<<"0的ASCII码为: "<<e<<endl;//0的ASCII码为48
	return 0;
}

运行结果

2) 整形赋值字符

#include<iostream>
using namespace std;
/*
  整形赋值给字符型 
*/
int main(){
	char p=97;
	char q=65;
	char e=48;
	cout<<"ASCII 97对应字符为: "<<p<<endl;//ASCII 97对应字符为a 
	cout<<"ASCII 65对应字符为: "<<q<<endl;//ASCII 65对应字符为A
	cout<<"ASCII 48对应字符为: "<<e<<endl;//ASCII 48对应字符为0
	return 0;
}

运行结果

3) 字符型算术运算

#include<iostream>
using namespace std;
/*
  字符算术运算 
  char p='a';//a对应ASCII码为97 
  p++;//97+1=98 ,ASCII码98对应的字符是b 
  char q='a';//a对应ASCII码为97 
  q=q-32;//q=65,ASCII码65对应的字符是A
*/
int main(){
	char p='a';
	p++;
	cout<<"p的值为:"<<p<<endl;//p的值+1后变成b 
	char q='a';
	q=q-32;
	cout<<"q的值为:"<<q<<endl;//p的值-32后变成A  
	return 0;
}

运行结果

5 拓展

1 为什么用强制类型转换

1) 无法进行自动类型转换

#include<iostream>
using namespace std;
/*
  求2个数之和 
  int a=2147483647;
  int b=10;
  a + b;//a和b都是int,所以相加结果还是int
  a + b=2147483657 已经超出int范围,所以计算错误 
*/
int main(){
	int a=2147483647;
	int b=10;
	long long c= a + b;//a+b超范围计算错误,赋值给c 
    cout<<c<<endl;//无法输出c的正确结果2147483657
	return 0;
}

运行结果

可以通过强制类型转换解决此问题

long long c= (long long ) a + b;//把a的类型从int转换成long long 

2) 不转换超出类型范围

int的使用4个字节表示二进制,最大可以表示2147483647的整数,如果实际计算过程中超过2147483647,需要使用更大数据访问的long long表示整数

2 ASCII码表

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值