字符变量在计算机内占一个字节,而整形变量占两个字节,因此整形变量在可输出字符的范围内(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。

评论