在c ++中添加ASCII

时间:2015-09-30 10:51:50

标签: c++

我想更改我的char变量。

using namespace std;    

int main()
{
    char q;
    q='b';
    char c=127;
    //cout << (int)q  << endl<< static_cast<int>('z');
    char d= static_cast<char>(static_cast<int>((static_cast<int>('z') +19)));
    cout << (int)d << endl;
    system("pause");
}

Intupt:

-115

为什么在添加变量后指定-115?

2 个答案:

答案 0 :(得分:1)

在您的平台上,char是8位signed 2补码类型。您实际上是溢出此类型,并且在C ++中溢出signed整数类型的行为是 undefined 不要这样做

注意:

  1. 标准规定了8位。

  2. char可以是unsignedsigned.

  3. 如果unsigned 必须的范围为[0,255],则255 + 1将为0. unsigned类型的溢出定义。

  4. 如果signed 可以的范围是-128到+127 -127到+127。 C ++ 14不允许后一个范围(1&#39; s补码)。 (有趣的是,这不是一个突破性的变化,因为从1到2的补码的差异只能在像你这样的格式错误的程序中观察到,如果有的话!)

  5. 一个简单的补救措施?使用unsigned char

答案 1 :(得分:0)

122 + 19 = 141 --> 1000 1101二进制

type char这里可能是8位signed int,所以第一位'1'是它的符号位。

1000 1101就像在计算机内存中一样。

但计算机通常使用补码来显示负数。

1000 1101真实代码1111 0011,同样地,第一个'1'是其符号位,因此1111 0011正好{ 10base中的{1}}