【问题标题】:Why in result of the implicit conversion we get the -128?为什么隐式转换的结果是-128?
【发布时间】:2014-09-12 07:26:07
【问题描述】:

我们有以下 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 的结果?

【问题讨论】:

  • coz char overflow see ref 有符号的 char 可能有 -128 到 127 的限制
  • unsigned char 会发生什么?
  • char 在您的情况下显然已签名(不一定如此)-因此为 128 -> 0x80 -> -128。
  • @PaulR +1 显示转化。

标签: c++ char int implicit-conversion


【解决方案1】:

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

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

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

注意:在这种情况下,实现会转换值128(char) -128,因为128 在二进制中表示为10000000,这恰好是-128 的有符号8 位表示。这适用于大量实现。

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 2014-03-21
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多