【发布时间】:2020-07-16 19:13:37
【问题描述】:
我是 C++ 的初学者,有一个关于转换的问题。将int转换为char值时,ASCII表超过127会怎样?
例如,
using namespace std;
int main()
{
double d = 0;
while (cin>>d){
int i = d;
char c = i;
int i2 = c;
cout<<"d=="<<d<<endl;
cout<<"i=="<<i<<endl;
cout<<"c=="<<c<<endl;
cout<<"i2=="<<i2<<endl;
cout<<"char:("<<c<<")"<<endl;
}
}
现在如果用户输入 150,当 i = d 时 i 变为 150,当 c = i 时 c 变为 û,这对我来说意味着 int 150 = char û
但是当 int i2 在屏幕上输出时,假设 int i2 将 char c 转换回整数,i2 == 106
我的假设是 int i2 也是 150。
如果有人可以向我解释这一点,我将不胜感激,因为我正在努力掌握这个概念。我读过,因为 char 可以保存 1 个字节的信息,而 int 可以保存 4 个字节的信息,所以该值是“缩小的”。不过,我不完全确定这意味着什么!
【问题讨论】:
-
int默认为signed int。char默认为unsigned char。这意味着int也可以显示负值,而 char 只能显示最大为 255 的正整数。当您将int显式声明为unsigned int时,该值保持不变(只要您不超过 255)。 -
@Sunburst275 --
char可以是有符号或无符号的;这取决于实施。没有默认值。 -
@PeteBecker 没错,但这适用于每种数据类型,不是吗?例如,
int在一个系统上可能是 4 个字节,但在另一个系统上可能是 8 个字节。据我所知,Windows 隐含地将char声明为unsigned char,还是我错了? -
@Sunburst275 -- 这与问题相去甚远,所以我们不要在这里讨论
char的签名。问一个问题! -
@PeteBecker 是的,请原谅我
标签: c++