Я наткнулся на C-код в книге, чтобы найти дополнение к двоичному числу.Я не был знаком с понятием дополнения двоичного числа к единице и двум, поэтому я провел тщательное исследование и теперь немного понял примерно то же самое.Но у меня все еще есть некоторые сомнения относительно того, как работает код.Код выглядит следующим образом (комментарии не были в исходном коде и были добавлены мной, чтобы я мог исправить их, если он неправильный) -
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char a[16]; /*declaring an array to hold the binary number string*/
int i, j, k, len; /*len is the length of the string*/
printf ("Enter a binary number: ");
gets (a); /*reads the input string*/
len= strlen(a); /*calculates length of string*/
for (k=0; a[k]!='\0';k++) /*to check if its a valid binary number or not*/
{
if (a[k] != '0' && a[k]!='1')
{
printf ("\nIncorrect Binary format...this program will quit");
exit(0);
}
}
for (i=len-1; a[i]!='1'; i--) /* An empty for loop*/
;
for (j=i-1; j>=0; j--) /*checks from right to left if the bit is 0 or 1*/
{
if (a[j]=='1')
a[j]= '0'; /*if the bit is 1, its converted to 0*/
else
a[j]= '1'; /*if the bit is 0, its converted to 1*/
}
printf ("\n2's compliment = %s", a);
}
Код работает абсолютно нормально, но у меня естьсомневается как.
Во-первых, я не совсем понимаю, что делает пустой цикл for.Считается ли это до тех пор, пока мы не встретим первый ноль с правой стороны?
Во-вторых, в третьем и последнем цикле for, мы просто переворачиваем значение каждого бита от 1 до 0 и от 0 до 1. Но мысделать это для дополнения одного, а не дополнения двух, верно?Нам нужно добавить 1 к дополнению к одному, чтобы найти дополнение к двум.Код, похоже, нигде не делает этого.Как это работает тогда?
Просьба прояснить, заранее спасибо.