为什么在隐式转换的结果我们得到-128?

时间:2014-09-12 07:26:08

标签: c++ char int implicit-conversion

我们有以下C ++代码

#include <iostream>

int main()
{
    int  A = 128;
    char B = A;
    A = B;
    std::cout << "B:= " << B << std::endl; 
    std::cout << "A:= " << A << std::endl; 
    return 0;
}

有人可以解释一下,为什么我们得到-128?

1 个答案:

答案 0 :(得分:3)

这是因为在您的系统中,char类型的范围为-128127

128不适合该系统上的char,因此会将其(以实现定义的方式)转换为值-128

当您将其分配回int变量时,保持值-128没有问题,这就是它所得到的。

作为注释:在这种情况下,实现转换值128 (char) -128,因为128以二进制形式表示为10000000,恰好是签名的8- -128的位表示。这适用于大量实现。