c语言字符和整型相差多少,c语言:整型和字符型的范围易错及分析

分析下面的程序:

#include

int main()

{

char c1, c2;

c1 = 97;

c2 = 98;

printf("c1=%c,c2=%c\n", c1, c2);

printf("c1=%d,c2=%d\n", c1, c2);

return 0;

}

(1)运行时会输出什么信息?为什么?

解:运行时输出:

c1=a,c2=b

c1=97,c2=98

请按任意键继续. . .

第一行输出是将c1,c2按%c的格式输出,97是a的ASCII码,98是字符b的ASCII码;

第二行输出是将c1,c2按%d的格式输出,所以输出两个十进制整数。

(2)如果将程序第4,5行改为:

c1=197;

c2=198;

运行时会输出什么信息?为什么?

解:程序:

#include

int main()

{

char c1, c2;

c1 = 197;

c2 = 198;

printf("c1=%c,c2=%c\n", c1, c2);

printf("c1=%d,c2=%d\n", c1, c2);

return 0;

}

结果:

c1=?c2=?

c1=-59,c2=-58

请按任意键继续. . .

由于在VS中,字符型数据是作为signed char类型处理的,存字符的有效范围为[0,127]之间,超过此范围的处理方法,不同系统得到结果不同,因而用“%c”格式输出,结果不可预料;

用“%d”格式输出时,输出c1=-59,c2=-58,这是按补码形式输出的,内存字节中第1位为1时,作为负数,59+197=58+198=256。

(3)如果将程序第3行改为:int c1,c2;

运行时会输出什么信息?为什么?

解:程序1:

#include

int main()

{

int c1,c2;

c1 = 97;

c2 = 98;

printf("c1=%c,c2=%c\n",c1,c2);

printf("c1=%d,c2=%d\n", c1, c2);

return 0;

}

结果:

c1=a,c2=b

c1=97,c2=98

请按任意键继续. . .

输出结果和(1)相同

程序2:

#include

int main()

{

int c1,c2;

c1 = 197;

c2 = 198;

printf("c1=%c,c2=%c\n",c1,c2);

printf("c1=%d,c2=%d\n", c1, c2);

return 0;

}

结果:

c1=?c2=?

c1=197,c2=198

请按任意键继续. . .

当c1 = 197;c2 = 198;时,用“%c”输出,仍然是不可预料的字符;用“%d”输出时,得到c1=197,c2=198

,因为它们在int类型的有效范围(-2^31,2^31-1)内,分配4个字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值