路漫漫其修远兮,吾将上下而求索
前言
本篇文章主要介绍c语言中字符型数据与整型数据相互转化的问题。
预备知识
ASCII码
ASCII码是由美国国家标准协会(ANSI)制定的一种标准单字节字符编码方案。
在十进制数(0~127)范围,每个十进制数分别对应不同的字符。
十进制数(0~31)范围对应的字符叫控制字符
十进制数(32~127)范围对应的字符叫打印字符
数据类型的大小
数据类型 | 大小(单位:字节) |
---|---|
char | 1 |
int | 4 |
一、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型数据不可以正确地相互转化。