2017-08-25 1 views
0

ich dieses Stück Code haben:C++ - int Zuordnung zu einem anderen dann die Zuordnung char char int

#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"); 
} 

Ausgang:

-116

Wie ich verstehe, char c = i würde das Zeichen, das den ASCII-Code 140 hat, c zuweisen, aber ich frage mich, was passierte, als ich danach int j = c; zugewiesen habe und wo -116 Wert kommt von?

Wenn ich char c = i; zu unsigned char c = i; ändere, dann ist der Ausgang 140. Gibt es trotzdem den Wert von j gleich 140 wenn ich unsigned hier nicht verwende? (Angenommen, dass i> = 0 und i < = 255)

Antwort

1

Die range of values for an unsigned char sind [0,255] inklusive - aber der Bereich der Werte für einen signed char ist [-128,127] inklusive.

Ihr Wert von 140 liegt außerhalb des Bereichs des signierten Chars, sodass es überläuft und umgeht auf -116. Zumindest scheint das der Fall zu sein - der Überlauf einer vorzeichenbehafteten Ganzzahl ist undefined behaviour.

Es gibt keine Möglichkeit, dies zu vermeiden, ohne unsigned char oder eine größere Alternative zu char zu verwenden - Sie versuchen einfach, einen Wert darzustellen, der nicht von diesem Typ dargestellt werden kann.