c语言-int型数据与char型数据相互转化

路漫漫其修远兮,吾将上下而求索


前言

本篇文章主要介绍c语言中字符型数据与整型数据相互转化的问题。


预备知识

ASCII码

ASCII码是由美国国家标准协会(ANSI)制定的一种标准单字节字符编码方案。
在十进制数(0~127)范围,每个十进制数分别对应不同的字符。
十进制数(0~31)范围对应的字符叫控制字符
十进制数(32~127)范围对应的字符叫打印字符

数据类型的大小

数据类型大小(单位:字节)
char1
int4

一、int型数据大小范围在[0,127]

当int型数据大小范围在[0,127]时,int型数据和char型数据可以正确地相互转化,即两者可以相互代替。
原因:计算机存储数据采用二进制形式,所以char型数据在计算机是以二进制形式存储的。
下面演示例子:

  • int型数据转化char型数据
int main() {

	int i1, i2; //定义两个整型变量
	char c1, c2; //定义两个字符型变量
	//输入
	printf("请输入两个整数: ");
	scanf("%d %d", &i1, &i2);

	//int变量赋值给char变量
	c1 = i1;
	c2 = i2;

	//输出
	printf("按字符输出结果: %c %c\n",c1,c2);
	printf("按整数输出结果:%d %d", c1, c2);
	return 0;
}

输出结果:
在这里插入图片描述

分析结果:
输入两个在[0,127]范围内的整型数据,将两个整型变量的值分别赋值给两个字符型变量,输出时,按照字符输出和整数输出,结果符合ASCII编码。说明int数据和char数据正确地相互转化。
结论: 当int型数据在[0,127]时,int型数据可以转化成char型数据。


二、int型数据大小不在[0,127]范围

当int数据大小不在[0,127]范围时,int型数据不会正确地转化成char型数据,即两者不可以相互代替。
原因:int型数据占4个字节,而char型数据占1个字节,当int数据大于127时,如果将int变量的值赋值给char变量,char变量只会存储int型变量的最后一个字节(低8位)。如下图所示:
在这里插入图片描述

  • int型数据转化char型数据(按照上面图片的数据演示)
int main() {

	int  i1; //定义一个整型变量
	char c1; //定义一个字符型变量
	//输入
	printf("请输入一个整数 i1: ");
	scanf("%d", &i1);

	//将整型变量的值赋值给字符变量
	c1 = i1;

	//输出
	printf("按字符输出结果: %c\n",c1);
	printf("按ASCII码输出结果: %d",c1);
	return 0;
}

输出结果:
在这里插入图片描述
分析结果:
输入一个大于127的整数时,将整型变量的值赋值给字符型变量,输出时,分别按字符结果和ASCII值输出,输入值为289,输出字符为’!'和ASCII值为33,整型数据和字符型数据转化不正确。
结论: 当int数据大小不在[0,127]范围时,int型数据不会正确地转化成char型数据。


总结

当int型数据大小范围[0,127]时,int型数据和char型数据可以正确地相互转化;
当int数据大小不在[0,127]范围时,int型数据和char型数据不可以正确地相互转化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值