疑问程序如下:
#include"stdio.h"
char ch1 = 0;
char ch2 = 0;
char ch3 = 0;
char buf[4] = "123";
void main()
{
ch1 = buf[1];
ch2 = buf[2];
ch3 = ch1 * ch2;
printf ("ch3=%d",ch3);
while(1);
}
为什么打印出来的是-10?
打印改为%c,则打印出来一个红心...
C语言关于字符型变量的计算问题,不是太明白
答案:3 悬赏:40
解决时间 2021-02-20 20:11
- 提问者网友:不懂我就别说我变
- 2021-02-20 09:54
最佳答案
- 二级知识专家网友:输掉的尊严
- 2021-02-20 10:15
void main()
{
ch1 = buf[1]; //buf[1]值为‘2’,'2'对应的ascii编码为50
ch2 = buf[2]; //buf[1]值为‘3’,'2'对应的ascii编码为51
ch3 = ch1 * ch2; //相当50*51=2550, 变量ch3的范围是-127~128,明显2550(1001 1111 0110)超过了最大值128,此时数据溢出后变为二进制的1111 0110,最高位的1表示负数,后面的7位111 0110表示真正内容,根据负数的编码规则(取反后加1)就变成二进制1001,十进制就是-10了
printf ("ch3=%d",ch3);
while(1);
}
{
ch1 = buf[1]; //buf[1]值为‘2’,'2'对应的ascii编码为50
ch2 = buf[2]; //buf[1]值为‘3’,'2'对应的ascii编码为51
ch3 = ch1 * ch2; //相当50*51=2550, 变量ch3的范围是-127~128,明显2550(1001 1111 0110)超过了最大值128,此时数据溢出后变为二进制的1111 0110,最高位的1表示负数,后面的7位111 0110表示真正内容,根据负数的编码规则(取反后加1)就变成二进制1001,十进制就是-10了
printf ("ch3=%d",ch3);
while(1);
}
全部回答
- 1楼网友:湫止没有不同
- 2021-02-20 13:04
ch1= buf[1]= '2'= 50
ch1= buf[2]= '3'= 51
ch3= 50*51= 2550= 100
- 2楼网友:滚出爷的世界
- 2021-02-20 11:49
#include
main()
{
char a;
scanf("%c",&a);
while(a=='y')
{
printf("yes\n");
getchar();//吸收掉回车换行字符,你输入的是y+回车,如果不洗手回车字符,那么再输入字符时回车会自动进去
scanf("%c",&a);
}
printf("no");
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯