'a'=='b'。这是一个很好的方法吗?

时间:2011-11-30 18:06:19

标签: c++ c comparison char

如果我以这种方式比较两个字符会发生什么:

if ('a' == 'b')
    doSomething();

我真的很想知道语言(和编译器)在找到这样的比较时会做什么。当然,如果这是一种正确的做事方式,或者我必须使用像strcmp()这样的东西。

修改 等等。
由于有人不明白我的意思,我决定用另一种方式解释。

char x, y;
cout << "Put a character: ";
cin >> x;
cout << "Put another character: ";
cin >> y;

if (x == y)
    doSomething();

当然,在if括号中,您可以将==替换为任何其他比较运算符 我真正想知道的是:如何在C / C ++中考虑角色?当编译器比较两个字符时,它如何知道'a'与'b'不同?它指的是ASCII表?

9 个答案:

答案 0 :(得分:20)

您可以通过比较运算符==

绝对安全地比较基本类型

答案 1 :(得分:13)

在C和C ++中,单字符常量(和char变量)是整数值(在数学意义上,不是int值意义上的)。当您使用==时,编译器会将它们作为整数进行比较。您还可以使用其他整数比较运算符(<<=等)。您也可以添加和减去它们。 (例如,将数字字符更改为其数值的常用习语是c - '0'。)

答案 2 :(得分:5)

对于单chars,此表单是正确的。如果两个操作数在编译时都是已知的,那么条件可以(并且几乎肯定会)在编译时进行评估,而不会产生任何代码。

请注意,char'a')与单字符字符串("a")不同。对于后者,比较具有不同的含义:它将比较指针而不是字符。

答案 3 :(得分:5)

你的处理器会减去两个操作数,如果它为零,则设置零条件位,你的值是相同的。

例如:在arm机器上你有nzcv(负,零,进位,溢出)位来告诉你发生了什么。

答案 4 :(得分:1)

由于a不等于b,所以不会发生任何事情。

如果你的问题是正确的,那么答案是肯定的。

答案 5 :(得分:1)

首先'a'和'b'不是字符串,它们是字符。由于其影响,细微差别很重要。

您可以将字符与字符进行比较,就像将整数与整数和浮点数与浮点数进行比较一样。它通常没有完成,因为结果总是一样的。即'a' == 'b'总是假的。

但是,如果您要比较字符串,则必须使用strcmp()之类的内容。

答案 6 :(得分:1)

编译器只是插入一条指令来比较两个字节的相等性 - 一个非常有效的操作。当然,在你的情况下,'a'=='b'相当于一个常数false

答案 7 :(得分:0)

编译器将比较数字ASCII代码。所以,'a'永远不会等于'b'。但, 'a' < 'b'的计算结果为true,因为'a'出现在ASCII表中的'b'之前。

答案 8 :(得分:0)

当然,你想使用像

这样的变量
char myChr = 'a' ;
if( myChr == 'b' ) puts( "It's b" ) ;

现在你可以开始考虑"Yoda conditions",你会去哪里

if( 'b' == myChr )  puts( "It's a b" ) ;

以防万一你在第二个例子中意外输入一个等号:

if( 'b' = myChr ) puts( "It's a b" ) ;

会引发编译错误