2017-08-25 23 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的更大替代方法,没有什么办法可以避免这种情况 - 您只是试图表示一个无法用该类型表示的值。