[英]Addition of two chars, example char a = 'A' and b = 'B'
為什么這個程序 output 是一個負值?
#include <stdio.h>
int main() {
char a = 'a', b = 'b', c;
c = a + b;
printf("%d", c);
}
這些值不應該轉換成 ASCII 然后加起來嗎?
在最常見的平台上, char
是一種有符號類型,可以表示從-127
到+128
的值。 您似乎正在使用char
具有這些屬性的平台。
請注意,在某些平台上, char
是無符號的,因此可表示值的范圍是0
到255
。 但是,您似乎沒有使用這樣的平台。
將'a'
添加到'b'
與添加它們的 ASCII 值(分別為97
和98
)相同,結果為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
a = 97
b = 98
a+b = 195
195 超出了帶符號的 8 位范圍 (-128...127)
195 = 0b11000011
這在帶符號的 8 位表示中等於 -61。
正如3Dave所解釋的那樣,char 是一種有符號類型,將兩個這種類型的變量相加會導致溢出並產生負結果。 即使您使用unsigned char
,此總和也可能導致溢出,但不會產生負值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.