今天做c语言题,题目是输入两个字符,将他们的ASCII码最高四位进行与运算,最低四位进行异或运算,输出之后的字符。以下是代码
#include<stdio.h>
int main()
{
char a,b,c,d,e;
scanf("%c%c",&a,&b);
c=(a>>4)&(b>>4);
c=c<<4;
d=(a<<4)^(b<<4);
d=d>>4;
e=c|d;
printf("%c\n",e);
}
我当然知道还有更好的解决方法,比如int类型然后取模运算等,但是我很好奇,在提交后的测试样例中,唯独 ''M'' ''R''这两个字符一起输入的时候会出现错误,导致最后输出的时候e的值通过%d输出为-1,目前经过初步判断,问题出在异或运算中,在ASCII吗77在位移过后出现问题。想请问一下大家,究竟为何会出现这种问题,c语言在char类型位移溢出的时候是如何处理的,如何解决这个问题呢?
溢出后会发生截断。还会只截取低八个bit位。数据在内存中存放是补码。