char和int如何在C ++中工作

时间:2015-06-04 14:59:23

标签: c++ char integer int

可能我会问一个愚蠢的问题,但我想确认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;
}

我认为现在我的问题很清楚了。

4 个答案:

答案 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

请注意,编译器charint是两种不同的类型。它可以区分这两者。因此,operator<<仅在输入为char类型或可隐式转换为char的类型时才显示字符。

答案 1 :(得分:1)

char的情况下,它不是正在相乘的二进制数,它是您键入的任何内容的ASCII值。在6的情况下,ASCII值为{{1} },所以输出54。当2916a时,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