C语言 添加两个字符,例如字符a = 'A'和B = 'B'

z9ju0rcb  于 2022-12-02  发布在  其他
关注(0)|答案(3)|浏览(189)

为什么此程序输出负值?

#include <stdio.h>

int main() {
    
    char a = 'a', b = 'b', c;
    
    c = a + b;
    
    printf("%d", c);

}

这些值不是应该转换成ASCII码然后加起来吗?

hmae6n7t

hmae6n7t1#

在最常见的平台上,char是一个带符号的类型,可以表示从-127+128的值。您似乎正在使用一个char具有这些属性的平台。
请注意,在某些平台上,char是无符号的,因此可表示值的范围是0255。但是,您似乎没有使用这样的平台。
'a'加到'b'等于将它们的ASCII值(分别为9798)相加,得到的结果为195。在您的平台上,此结果不能表示为char。在许多实现中,第一位是符号位,因此得到-61
使用unsigned char会产生可打印7比特ASCII字符的预期结果。

#include <stdio.h>

int main() {
    
    char a = 'a', b = 'b';
    unsigned char c;
    
    c = a + b;
    
    printf("%d\n",a);
    printf("%d\n",b);
    printf("%d\n", c);

}

输出:

97
98
195
31moq8wy

31moq8wy2#

a   = 97
b   = 98
a+b = 195

195超出有符号8位范围(-128... 127)

195 = 0b11000011

在有符号8位表示中,这等于-61。

uxhixvfz

uxhixvfz3#

正如3Dave所解释的,char是一个有符号类型,两个这种类型的变量相加会导致溢出,并产生负值。即使使用unsigned char,这个和也会导致溢出,但不会产生负值。

相关问题