0

bin-'0'2 進数を 10 進数に変換するこのコードの意味を教えてください。ありがとう。

#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;
}
4

2 に答える 2

4

bin - '0'bin の ASCII 値をその整数値に変換します。を考えるとbin = '1'bin - '0' = 1

于 2012-10-30T14:50:08.557 に答える
1

このコードは、C++ の文字が実際には単なる特殊な int であるという事実を利用しています。getchar を使用して、「0」または「1」の char を取得しています。これを 0 または 1 に変換する必要があります (これらは文字ではなく数値であることに注意してください)。文字 '0' が '1' の 1 つ前にあるとすると、両方から文字 '0' の値を引くと、'0' が 0 になり、'1' が 1 になります。

'0' - '0' = 0
'1' - '0' = 1
于 2012-10-30T14:51:41.433 に答える