我无法理解为什么以下代码无效。
#include <iostream>
using namespace std;
int main() {
int i = 5;
char a = i;
char b = (char)i;
cout << a << endl;
cout << b << endl;
return 0;
}
当我从终端运行它时,我没有得到任何输出(g ++&#34; ./ test.cpp&#34; -std = c ++ 17 -Wall -O3 -o&#34 ; ./ test&#34;&amp;&amp;&#34; ./ test&#34;)当我在崇高文本3中运行它时,我得到(output)
我最近已将我的gcc更新为8.0.1并使用ubuntu(more details),但我也遇到了安装在它旁边的gcc 5的问题。 (但由于某种原因,重新安装了gcc 5)。不知道它是否与此有关......
有人知道为什么这个荒谬的简单演员不起作用? 先谢谢你。
答案 0 :(得分:1)
答案 1 :(得分:1)
您要求计算机在其字符表中打印第5个字符。这是一个控制角色specifically ENQ。控制字符很少有可见输出;它们还有一些其他含义可能会或可能不再有用(有些像字符#10和#13一样非常有用)。
如果你想要打印数字5的字符,你要么必须使用'5',要么可以转换值'0'+5
(ASCII格式为48+5)。
也许你不明白演员是做什么的。 强制转换不一定以您通常认为的方式转换数据。有些演员表(例如,int
到float
;有些演员没有。你正在使用的演员只是将数据重新解释为不同的类型:在机器级别,它只是数值5。将其转换为char
不会更改该数字的数据;它只是表示输出系统将其视为ASCII表中的第5个字符,而不是整数5.如果要将其转换为字符5
,那么你通常需要做一些工作(比如我上面所说的)。