2017-08-25 74 views
0

我有這樣一段代碼:C++ - 分配的int然後指派字符CHAR到另一個詮釋

#include <stdio.h> 
#include <iostream> 
int main(int n, char** args) 
{ 
    int i = 140; 
    char c = i; 
    int j = c; 
    printf("%d", j); 
    system("pause"); 
} 

輸出:

-116

據我所知,char c = i會將具有ASCII代碼140的字符分配給c,但我想知道在分配int j = c;之後發生了什麼以及-116價值從何而來?

如果我將char c = i;更改爲unsigned char c = i;,則輸出爲140。 如果我在這裏不使用unsigned,是否有j的值等於140? (假設i> = 0和I < = 255)

回答

1

range of values for an unsigned char[0,255]包括 - 但對於一個符號字符值的範圍是[-128,127]以下。

您的值140超出了signed char的範圍,所以它溢出並回繞到-116。至少這似乎正在發生 - 有符號整數的溢出是undefined behaviour

如果沒有使用unsigned charchar的更大替代方法,沒有什麼辦法可以避免這種情況 - 您只是試圖表示一個無法用該類型表示的值。

相關問題