字符变量在计算机内占一个字节,而整形变量占两个字节,因此整形变量在可输出字符的范围内(ASCII码为0~255这间的字符)是可以与字符数据互相转换的.如果在此范围外,则不能代替.
#include <stdio.h>
main()
{
int a, b;
printf("请输入两个整数 a, b:\n");
scanf("%d,%d",&a,&b);
printf("按字符输出为:\n");
printf("%c,%c\n",a,b);
char c1, c2;
c1 = a;
c2 = b;
printf("转换为字符型后按整数输出为:\n");
printf("%d,%d\n",c1,c2);
}
运行结果:
========================================
请输入两个整数 a, b:
97,289↙
按字符输出为:
a,!
转换为字符型后按整数输出为:
97,33
========================================
★ c1,c2是字符型变量,只占一个字节,只能存放0~255范围内的整数,97为a的ASCII码,而289超过了255,所以只将b在内存中的低8位赋值绐c2 (b按字符输出时同理) , 289-255=33 而33为!的ASCII码.
★ Turbo C 把字符处理成带符号的整数。
######################################更正########################################
经网友指出, 做如下改正:
289-255=33显然是错误的, 应该是289-256=33。
从0~255共是256个,所以应该减去256而非255。
换成二进制就清楚了,289是100100001,按字符输出时取后8位00100001,即33。
评论