c ++:为什么char c = 0xff和int n = c + 1得到100的结果?

Pep*_*ork -7 c++

我只是想知道为什么n = 0?

char c = 0xff;
    int n = c+1;
    cout << n << endl;
    system("pause");
Run Code Online (Sandbox Code Playgroud)

1)c = 0xff
2)0xff + 1 = 0x100.

你能解释一下吗?

jua*_*nza 5

假设一个无符号char类型,0xff将给出十进制值255.添加一个,你得到256,0x100或256.这将被打印出来,100好像你已经被操作std::cout以十六进制打印std::cout << std::hex;

假设一个8位符号char,0xff将溢出,给-1.添加1,你会得到0.


AnT*_*AnT 5

您的平台显然使用签名 char类型.初始化时0xFF,它会溢出并导致实现定义的行为.你的c结局等于-1.当你加入1-1,你会得到0.这里没什么不寻常的.

声明你的cas unsigned char,结果n值将是0x100,这可能是你所期望的.

  • @Oli Charlesworth:问题的标题与问题的主体相矛盾.在身体中他说'n`是0. (3认同)