C语言,一个字符和数字相加,一个奇怪的问题,求大神
发布网友
发布时间:2023-10-27 11:46
我来回答
共4个回答
热心网友
时间:2024-11-10 08:31
#include<stdio.h>
int main()
{
char ch;
int i;
printf("输入一个字符\n");
scanf("%c",&ch);
printf("输入一个数字\n");
scanf("%d",&i);
ch=ch+i;
if((unsigned char)ch>122&& (unsigned char)ch<(123+i))// 转化成无符号数再比较大小即可,否则 大于127的数会被当初负数处理。
ch=(ch-122)+96;
printf("%d\n%c\n",(unsigned char)ch,ch);
}
热心网友
时间:2024-11-10 08:32
char类型表示一个有符号数的范围为:-128到127
z的ascii值为122
122+6=128
在内存中,128用一个字节表示就是
1000 0000
而这个数值,按整型输出时,表示的就是-128(补码)
解决你的问题,只需要将ch定义成无符号数就可以了
unsigned char ch ;
热心网友
时间:2024-11-10 08:32
很简单,z的ascii值为122
加6=128>127
而char范围为-128 到127,数值越界了,所以变成-128追问怎么解决? 有没有类似长整型的 char ?
追答改成unsigned char就可以了。或者定义成int
热心网友
时间:2024-11-10 08:33
并不奇怪
char默认是有符号的
范围-128到127
当 加和大于127,就会从最小的-128那里继续开始了