可能我会问一个愚蠢的问题,但我想确认char是如何工作的?让我用实例解释一下我想问的问题。
假设我声明了char variable
然后input 6
或任何整数字符。
#include <iostream>
using namespace std;
int main(){
char a;
cin >> a;
cout << a*a; // I know here input's ASCII value will multiply
return 0;
}
与整数input 6
#include <iostream>
using namespace std;
int main(){
int a;
cin >> a;
cout << a*a; // Why compiler not take input's ASCII Value here?
return 0;
}
我认为现在我的问题很清楚了。
答案 0 :(得分:3)
char
是基本数据类型,大小为1字节(不一定是8位!!!),能够表示至少所有字符的ASCII code range。因此,例如,char x = 'a';
确实存储了'a'
的ASCII值,在本例中为97.但是,ostream
运算符过载,因此他们知道&#34;如何处理char
,而不是盲目地在97
之类的行中显示cout << x;
,而是显示字符的ASCII表示,即'a'
。
但是,无论何时执行a * a
,编译器都会执行名为integral promotion的内容,并隐式将char
中的数据转换为int
。因此,对于编译器,表达式a * a
被翻译为(int)a * (int)a
,这是97 * 97
的结果,因此您最终显示9409
。
请注意,编译器char
和int
是两种不同的类型。它可以区分这两者。因此,operator<<
仅在输入为char
类型或可隐式转换为char
的类型时才显示字符。
答案 1 :(得分:1)
在char
的情况下,它不是正在相乘的二进制数,它是您键入的任何内容的ASCII值。在6
的情况下,ASCII值为{{1} },所以输出54
。当2916
为a
时,int
会直接存储,因此会输出6
。
答案 2 :(得分:0)
对于 int ,它会将您输入的数字作为数值而不是ASCII值读取。因此,您只能使用整数数字,但 char 允许您使用任何字符(例如A,B,C,D | 1,2,3,4 |! #%^)并使用其ASCII值。例如,ASCII值4为52,A,*的ASCII值分别为65和42。 注意:大写字母与小写字母相比有所不同(例如,S = 83,而相反,s = 115)。
希望这有点帮助。
答案 3 :(得分:0)
这是因为隐式类型转换:
只要某种类型的表达式执行隐式转换 T1用于不接受该类型的上下文中,但接受一些 其他类型T2,特别是:
当表达式用作具有运算符的操作数时 预计T2
在你的例子中
int PERSISTENCE_MESSAGE = 2; // Persist message
String TEXT_MESSAGE = "text/plain";
String queueName = "QUE-1";
Channel channel = this.connection.createChannel();
channel.queueDeclare(queueName, true, false, false, null);
// Build message properties
Map messageProps = new HashMap();
//messageProps.put("TIME_MSG_RECEIVED", time);
messageProps.put("SOURCE_SYS", "SRC1");
messageProps.put("DESTINATION_SYS", "DST1");
// Set message properties
AMQP.BasicProperties.Builder basicProperties = new AMQP.BasicProperties.Builder();
basicProperties.contentType(TEXT_MESSAGE).deliveryMode(PERSISTENCE_MESSAGE)
.priority(1).headers(messageProps);
channel.basicPublish("", queueName, basicProperties.build(), message.getBytes());
System.out.println(" Sent message to RabbitMQ: '" + message + "'");
channel.close();
运算符*需要一个整数类型,因此类型char a;
cin >> a;
cout << a*a; /
被隐式转换为char
,因此在将char转换为int时,系统使用相应的char值的ASCII值。请在此处查看更多详情http://en.cppreference.com/w/cpp/language/implicit_cast