Бинарно собирање и одземање

Во своето подолго писмо нашиот читател Дарко Петрески од Кичево меѓу другото прашува:
"... Во вториот дел на курсот за микроконтролери е речено дека вториот комплемент се добива со инверзија на цифрите и додавање на 1. На пример за бројот 1210=00001100 направена е инверзија при што е добиено 11110011, но кога е додаден 1 се добило 11110100, а не како што секој би очекувал 11110010. Дали има некоја финта, како на пример 0 пишуваме, а 1 памтиме или пак нешто друго е во прашање?..."

Познавањето на основните аритметички операции со бинарните броеви е од големо значење за понатамошна успешна експлоатација на микроконтролерите. Особено важни се операциите собирање и одземање. Без нивно одлично владеење не е можно да се сфати работата на микроконтролерот. Го поздравувам Вашето интересирање, и со задоволство ќе се обидам да помогнам.
Во случајов проблемот се состои во операцијата собирање. Нека набљудуваме еден бројчаник од километража на автомобил, кој всушност е еден декаден броен систем. Првата цифра од нашата десна страна кога сме свртени кон бројчаникот, ги покажува единиците, втората десетките, третата стотките и.т.н. Нека ја именуваме првата цифра од десно која уште се нарекува и најмалку важна како прва.
Ако првата цифра има вредност девет, следниот километар таа ќе добие вредност нула. Но вредноста на втората цифра ќе се зголеми за еден затоа што претходната цифра повторно се вратила на нултата вредност. Изразено преку пример, ако вредноста на првите две цифри била 49, наредниот километар вредноста на цифрите ќе биде 50. Ова верувам е повеќе од јасно.
Нека бројчаникот ги покажува изминатите километри во бинарниот броен систем. Во овој случај цифрите ќе се состојат од единици и нули. Нека бројот на изминати километри е 000000112 односно 310. Следниот изминат километар првата цифра ќе дојде на нултата вредност (нула) и ќе ја зголеми за еден втората цифра. Втората цифра во случајов исто така ќе дојде на нултата вредност и ќе ја зголеми за еден третата цифра. Така бројот на поминати километри ќе биде 000001002, односно 410. Во продолжението на одговорот ќе ја наведам финтата при собирањето. Горенаведеното сликовито објаснување некои читатели може да го оценат како непотребно. Меѓутоа од искуството во давање часови од оваа област, дојдов до заклучок дека е од голема корист за нашата проблематика.
Сега да ги собереме броевите 00111101 и 11110100 преку најлесниот алгоритам на собирање од аспект на бинарните броеви. Рековме дека важи:
00111101
+11110100
__________
00110001
Одиме од десно кон лево. Збирот на првите две цифри е 1. Збирот на вторите две цифри е 0. Збирот на третите цифри е 0 (цифрата доаѓа на нулта вредност) и префрламе 1 на четвртите цифри односно памтиме 1. Збирот на четвртите цифри е 1, ја додаваме памтената 1 од претходните цифри, па добиваме 0, а 1 памтиме. Збирот на петтите цифри е 0, па со памтената 1 од претходните цифри добиваме 1. Значи за петтите цифри добиваме 1 и 1 памтиме. Случајот со шестите цифри е ист, значи пак пишуваме 1 и 1 памтиме. Збирот на седмите цифри е 1, со додавање на памтената 1, добиваме 0, а 1 памтиме. Збирот на осмите цифи е 1 што собрано со памтената 1 го дава резултатот 0.
Се надевам дека одговорот беше корисен и разбирлив.
Ивица Ѓорѓиев