C ++ - 将int赋值给char然后将char赋给另一个int

时间:2017-08-25 08:25:24

标签: casting 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");
}

输出:

  

-116

据我了解,char c = i会将具有ASCII代码140的字符分配给c,但我想知道在此之后分配int j = c;时发生了什么,-116在哪里价值来自哪里?

如果我将char c = i;更改为unsigned char c = i;,则输出为140。 如果我在这里不使用j,是否仍然可以使140的值等于unsigned? (假设i> = 0且i <= 255)

1 个答案:

答案 0 :(得分:1)

range of values for an unsigned char包含<site name="MyWebSite" id="1234"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="c:\inetpub" /> </application> <application path="/subsite1" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Solution\subsite1" /> </application> <application path="/subsite2" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Solution\subsite2" /> </application> <application path="/subsite3" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Solution\subsite3" /> </application> <bindings> <binding protocol="http" bindingInformation="*:1234:localhost" /> </bindings> </site> - 但签名字符的值范围为[0,255]

[-128,127]的值超出了签名字符的范围,因此溢出并回绕到140。至少那似乎正在发生的事情 - 有符号整数的溢出是undefined behaviour

如果不使用-116unsigned char的更大替代品,我们没有任何办法可以避免这种情况 - 您只是想表示一个无法实现的价值由该类型代表。

相关问题