【发布时间】:2018-06-05 06:12:40
【问题描述】:
double d=0;
while(cin>>d){
int i=d;
char c=i;
int i2=c;
cout<<"d=="<<d
<<"i=="<<i
<<"i2=="<<i2
<<" char("<<c<<")\n";
}
我正在阅读 Programming Principles and Practice Using C++ 2nd Edition。我在安全和不安全的转换主题。给出的代码是一个练习,运行时我输入1000,然后输出
d==1000i==1000i2==-24 char(Φ)
我想知道当int太大而char无法存储时机器会做什么,比如1000变成-24。
【问题讨论】:
-
1024是256的倍数,也就是2^8,一个char往往是8位。 1000 少 24,所以 -24 == 1000 模 256。
-
对于常规字符,字符的值为 1024%127,对于无符号字符,其值为 1024%256。虽然这被认为是不好的做法
-
@Jake 对于非
unsigned chars,没有明确的值;它充其量是定义的实现。如果你看到了结果1024%127,那是你的实现细节。 -
@underscore_d 我很抱歉这是 % 128
-
@JakeFreeman 再次阅读我的 cmets。恕我直言,一种实现方式非常无趣。那就是:仅仅因为你的实现返回一个特定的结果并不意味着标准要求它,或者编写依赖于该结果的代码在不同的系统上编译时不会严重破坏。
标签: c++