我无法理解这个程序的输出:
void main(){
double d=3.1416;
char ch=*(char*)&d;
cout<<ch;
}
输出:2
注意:2的尺寸比通常的2小得多。
请解释第3行的含义。 谢谢。
答案 0 :(得分:1)
在你的陈述中:
char ch=*(char*)&d;
您正在执行以下操作:
1.取变量的地址或位置
2.创建一个类型为character的指针,指向变量
3.解除引用(将变量的第一个位置转换为一种字符)(尚未发生转换。)
4.将d
的第一个内存位置分配给字符类型变量(尚未转换)。
然后,您将在ch
。
如果ch
中的值是可打印的值,那么您很幸运;但是,我怀疑它会有意义。否则,你将无法看到它。
如果要将内部表示转换或转换为文本表示,请使用:
cout << d;
我强烈建议在此代码上使用调试器并查看变量d
的内存位置。取值并查看它是否可打印。
编辑1:
第4行中打印的值取决于值3.1416
在内存中的存储方式。
由于它是一个浮点变量,我们可以猜测它分为:符号,尾数和指数。最大的问题是,有多少比特专用于三组。通常,一位是标志。其他人依赖于您的平台。如果平台上的char
类型是8位,并且顺序是尾数,指数,然后是符号,则您的字符将是尾数的前8位,这可能不是可打印字符。