Печать двоичного представления знака без знака назад? - PullRequest
0 голосов
/ 22 марта 2019

Как именно работает этот код?Я запутался в первом цикле for, так как двоичный код начинается с 0, и если он не равен двоичному представлению символа, он будет увеличиваться, поэтому двоичный код равен 1 и так далее?

без знака char c;int двоичный;

scanf("%c", &c);
getchar();

printf("The decimal representation is: %d\n", c);

for (binary = 0; (1<<binary)<=c; binary++){  // moving to the left
}                                           // until binary code matches c

printf("The backwards binary representation is: ");

for (int i=0; i<binary; i++){   // since we know the size
    printf("%d", ((c>>i)&1));   // 1s and 0s are shifted to right
}

printf("\n");
return 0;

1 Ответ

1 голос
/ 22 марта 2019

Это:

for (binary = 0; (1<<binary)<=c; binary++)

просто подсчитывает, сколько значащих битов содержится в целом числе "c".

Например, если «c» равно 0101100 в двоичном виде, старший бит - это 6-й справа, а «двоичное» будет установлено в 6.

Если «c» равно 01 в двоичном виде, старший бит будет первым справа, а «двоичный» будет установлен в 1.


Самая большая проблема с этим кодом - его почти бесполезные комментарии. Если должны быть комментарии, замените это:

/* moving to the left until binary code matches c */

с этим:

/* Count number of significant bits.*/

Комментарии должны содержать почему код есть, а не описывать, как он работает.

Комментарии, подобные этому, не служат никакой цели:

/* since we know the size 1s and 0s are shift to right */

Вторая по величине проблема - это имена переменных. «двоичный» вводит в заблуждение. Назовите его «number_of_significant_bits», и код почти не нуждается в комментариях.

...