C 在短答案中加上两个字符会导致错误答案
我有一个函数,它的目标是将两个字符的值相加成一个短字符。似乎该值正在被截断或损坏 这是我的密码:C 在短答案中加上两个字符会导致错误答案,c,casting,C,Casting,我有一个函数,它的目标是将两个字符的值相加成一个短字符。似乎该值正在被截断或损坏 这是我的密码: char rotate(char a, char b){ unsigned short x = a + b; printf("init:%hu %hu = %hu\n", (unsigned char)a, (unsigned char)b, (unsigned short)x); if(x > 255){ x -= 255; } ret
char rotate(char a, char b){
unsigned short x = a + b;
printf("init:%hu %hu = %hu\n", (unsigned char)a, (unsigned char)b, (unsigned short)x);
if(x > 255){
x -= 255;
}
return (char) x;
}
unsigned char x = rotate((unsigned char)230, (unsigned char)100);
unsigned char y = rotate((unsigned char )200, (unsigned char)200);
unsigned char z = rotate((unsigned char) 230, (unsigned char)120);
结果是
init:230 100 = 74
init:200 200 = 65424
init:230 120 = 94
加法是用原始值完成的,是正确的
unsigned short x = a + b;
但显示是用转换后的值完成的
printf("init:%hu %hu = %hu\n", (unsigned char)a, (unsigned char)b, ....
打印
char
原始值
#if CHAR_MAX <= INT_MAX
printf("a:%d b:%d\n", a, b);
#else
// this is rare
printf("a:%u b:%u\n", a, b);
#endif
#如果CHAR_MAX65424
打开编译器警告。您的add
函数返回void
,但您正在分配其返回值。很抱歉,在我发布它时对其进行了修改,将其放回您希望将其添加为短字符的方式,但是您显式确保返回一个字符。为什么函数的参数没有未签名的字符,x=a+b
不会在x
中存储两个char
值,它只存储它们的总和。此外,即使您成功地在short
中存储了这两个值,您也会将其中一个值与转换回字符一起丢弃。如果要使用无符号字符
,为什么不将添加
函数的函数参数声明为无符号字符
?