C++类型强制转换的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 16:12:10
int main()
{
char x;
do
{
cout<<"please input x"<<endl;//语句1
cin>>x;
cout<<static_cast<int>(x)<<endl;
} while (1);
return 0;
}

如果我输入全角字符的话,会得到两个输出,为什么?
比如我输入¥,会得到-93和-92,且语句1也是执行两遍,为啥?

这个是因为每个汉字占了2个字节,当然用中文输入法输入的符号也占2个字节,且每个字节里所存的ASCII值(这里说ASCII值不太准确)均为负值,你写的程序是只要输入流里有东西,就会循环一次,即读入再输出。¥的2个ASCII值分别为-93和-92,第一次读入了-93,输出一次,然后第二次执行到cin时,又把-92读入,再输出,所以就有2个值了

char x,x是一个字符,占1字节

全角一个字符是 2字节,多循环一次

全角占用两个连续的字节,所以就两次了 ,汉字也是