3-分析下面程序

分析下面的程序:

int main()

{
char c1;
char c2;
c1=97;
c2=98;
printf(“c1= %c,c2=%c\n”,c1 ,c2);
printf(“c1 =%d,c2=%d\n”, c1 ,c2);
return 0;
}

(1) 运行时会输出什么信息?为什么?
(2) 如果将程序第 3、4 行改为
c1=197; c2= 198 ;
运行时会输出什么信息?为什么?
(3) 如果将程序第 1、2 行改为
int c1, int c2;
运行时会输出什么信息?为什么?

①97对应的字符是‘a’,98对应的字符是’b’,所以按字符输出的结果就是a,b,按十进制数字输出的结果就是97,98

②char类型有一个字节,一个字节有8位二进制,所以有2^8=256个数字,范围从-127~ 0 ~128,所以c1=197,c2=198时,超过了范围,而197的二进制为1100 0101,198的二进制为1100 0110,而二进制1100 0101在char类型的二进制中表示-59,1100 0110的二进制表示为-58,负数没有对应的ASCII值,所以运行时显示的是问号(不是字符问号)

③int类型有4个字节,能表示的范围很大,

疑问:为什么int c1=197,c2=198 按字符输出不是字符???

解释:因为有的编译器只能显示0~127左右,这是标准的ASCII,而128 ~ 255是是扩展的 ASCII 码。每个编译器都有自己的字符集,用的不同的标准输出显示是不同的。

正数的二进制求解方法:所有位按权加起来

负数的二进制求解方法:所有位取反加一,包括符号位

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值