在这个“n = 2 * n +(s [a] == 55)”行中,“s [a] == 55”是什么意思?

时间:2017-05-08 20:26:25

标签: c++

#include<cstdio>
using namespace std;
char s[11];
int main()
{
    int n=0,a;
    scanf("%s",s);
    for(a=0;s[a];++a) {
        n=2*n+(s[a]==55);
        printf("%d ",n);
    }
    printf("%d\n",n-1+(1<<a));
}

在这段代码中,我发现难以理解这条线 n=2*n+(s[a]==55);。 特别是s[a]==55。请告诉我它是如何运作的?

2 个答案:

答案 0 :(得分:2)

if语句一样,s[a] == 55如果字节true等于55,则评估为s[a];否则,它是false。就是这样。

truefalse值将分别转换为10,以便添加到2*n

当然,这个代码很可怕,不应该被使用。变量具有非描述性名称,并且总共有注释,解释了发生了什么以及为什么。

答案 1 :(得分:2)

n=2*n+(s[a]==55);

是一种神秘的写作方式:

if ( s[a] == 55 )
{
   n = 2*n + 1;
}
else
{
   n = 2*n;
}