在c++中添加ASCII

Addition ASCII in c++

本文关键字:ASCII 添加 c++      更新时间:2023-10-16

我想改变我的字符变量。

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?

在您的平台上,char是8位signed的补码类型。你实际上是在溢出这个类型,溢出signed整型的行为在c++中是未定义的不要这样做

指出:

  1. 8位是标准强制的

  2. char可为unsignedsigned.

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

  4. 如果signed it 可以有范围-128到+127 -127到+127。后一个范围(1的补码)在c++ 14中是不允许的。(有趣的是,这并不是一个突破性的变化,因为从1到2的补体移动的差异只会在像您这样的畸形程序中观察到,如果有的话!)

一个简单的补救办法?使用unsigned char

122 + 19 = 141 --> 1000 1101 binary

类型char在这里可能是8位带符号的int,所以第一个位'1'是它的符号位。

1000 1101就是它在计算机内存中的样子。

但是计算机通常使用一补码来表示负数。

1000 1101真码1111 0011,int同样,第一个'1'是它的符号位,所以1111 0011正好是10base

中的-115