Вычесть число 10100110101 из числа 11100011011 ( оба числа двоичные). без калькуляторов из интернета, они не так считают, я не могу разобраться в конечном итоге в первых цифрах
Сначала посмотрим, какое из чисел больше. Как в обычной арифметике: если вдруг надо вычесть из меньшего большее, мы вычитаем из большего меньшее и ставим в ответе знак минус. Требуется сделать вычитание (группировка разрядов по 4 сделана для удобства чтения): 111 0001 1011 - 101 0011 0101
Тут все хорошо, из большего вычитается меньшее. Вычитаем "в столбик", как обычные числа, но помним, что система счисления двоичная, поэтому когда из 0 вычитается единица, то мы "занимаем единичку" у старшего разряда, уменьшая его на 1. Но, поскольку цифр-то всего две - 0 и 1, то заняв единицу в старшем разряде, мы понимаем, что там останется 0 или 1. А когда мы занимаем единицу? Да лишь тогда, когда от 0 должны отнять 1. Единичка из старшего разряда - это 10₂, т.е. на самом деле обычная десятичная двойка, и после вычитания из 10₂ единицы, получим единицу. Как итог, в разряде: 0-0=0 1-1=0 1-0=1 0-1=1 и при этом в соседнем слева разряде надо тоже вычесть единицу по этим же правилам.
Const n=10; type ar=array[1..n+1] of integer; var a:ar; i,p:integer; procedure pr(var a:ar; p:integer; var k:integer); begin k:=1; while a[k]<>p do k:=k+1; end; begin Randomize; writeln('Массив A:'); for i:=1 to n do begin a[i]:=random(31); write(a[i]:4); end; writeln; p:=17; a[n+1]:=p; pr(a,p,i); if i<n then writeln('Значение 17 найдено, номер элемента = ',i) else writeln('Значения 17 в массиве нет'); end.
Пример: Массив A: 14 5 7 17 25 15 28 0 24 0 Значение 17 найдено, номер элемента = 4
Требуется сделать вычитание (группировка разрядов по 4 сделана для удобства чтения):
111 0001 1011
- 101 0011 0101
Тут все хорошо, из большего вычитается меньшее.
Вычитаем "в столбик", как обычные числа, но помним, что система счисления двоичная, поэтому когда из 0 вычитается единица, то мы "занимаем единичку" у старшего разряда, уменьшая его на 1. Но, поскольку цифр-то всего две - 0 и 1, то заняв единицу в старшем разряде, мы понимаем, что там останется 0 или 1. А когда мы занимаем единицу? Да лишь тогда, когда от 0 должны отнять 1. Единичка из старшего разряда - это 10₂, т.е. на самом деле обычная десятичная двойка, и после вычитания из 10₂ единицы, получим единицу.
Как итог, в разряде:
0-0=0
1-1=0
1-0=1
0-1=1 и при этом в соседнем слева разряде надо тоже вычесть единицу по этим же правилам.
111 0001 1011
- 101 0011 0101
1 1110 0110
Это и есть ответ.