2012-10-30 32 views
0

我想问一下,在这段将二进制数字转换为十进制数的代码片段中有什么bin-'0'。谢谢。二进制与十进制数字之间的转换

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
    char bin; 
    int dec = 0; 

    printf("Binary: \n"); 
    bin = getchar(); 

    while((bin != '\n')){ 
     if((bin != '0') && (bin != '1')){ 
      printf("Wrong!\n"); 
      return 0; 
     } 
     printf("%c",bin-'0'); // ? 

     dec = dec*2+(bin-'0'); // ? 
     bin = getchar(); 
    } 

    printf("Decimal: %d\n", dec); 

    return 0; 
} 
+0

'printf(“ %c“,bin-'0');'没有任何用处。相反,请尝试使用'“%d \ n”'。 –

+0

误导标识符名称的另一种情况。 –

回答

4

bin - '0'将bin的ASCII值转换为其整数值。给定bin = '1'bin - '0' = 1

+0

这是保证('1'是49)? –

+2

@LuchianGrigore我很确定ascii表是标准化的。但我不想肯定这一点。 – tomahh

+0

@LuchianGrigore根据[wikipedia](http://en.wikipedia.org/wiki/ASCII),是的,这是肯定的。 – tomahh

1

此代码利用了C++字符实际上只是特殊的整数。它使用getchar来接受一个'0'或'1'的字符。现在需要将其转换为0或1(注意这些是数字,而不是字符)。假设字符'0'在'1'之前是1,从两者中减去字符'0'的值将变为0和'1'为1.

'0' - '0' = 0 
'1' - '0' = 1