簡體   English   中英

添加兩個字符,示例 char a = 'A' and b = 'B'

[英]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是無符號的,因此可表示值的范圍是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
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM