这道题事实上准确答案应该是xx[i][j]+=ch;系统之所以认为是对的,是因为系统建立的时候就是以xx[i][j]+=4作为正确答案的,所以大可不必深究。考试的时候系统肯定不会出现这样低级的问题。
至于你说的“那如果 两个 字符变量 的ASCII值 相加 得出新的字符 然后输出
改怎么做”,这个主要就是一个强制转化的问题,以你的例子来说,假定 char a='a', b='#', c;
用(int)(a+b)就得到的就是两字符ASC||相加的和,再用(char)(int(a+b))强制转化即得最后答案,但答案肯定不是你说的d,因为#的ASC||值是35,a的ASC||值是97相加是132,而d的ASC||值是100,不信可以上机试试,有啥不明白的可继续问我,呵呵。
答案错了,就是x[i][j]+=ch
char取值在-128到127之间
如果字符'c' ascii是99,那么99<<4相当于99*16=1584,二进制为0110 0011 0000,那么低8位将传递给ch,即0011 0000,十进制为48
所以ch=xx[i][j]<<4;ch=48,99+48=147,二进制为1001 0011,超过127,则对1001 0011后7位+1取反为1110 1101,十进制为-109,ch=-109,在-128到127之间
“就把左移后的字符ASCII值再加上原字符的ASCII值,得到的新字符仍存入到原字符串对应的位置”
我觉得应该是 x[i][j]+=ch
x[i][j(也就是此字符串首地址)+4(地址后移4位)x[i][j]+=4(字符串首地址=地址后移4位+字符串首地址)
标签:C语言,ANCII,题目