Кіріспе

Бинарлық сандық жүйелерде теріс сандарды кодтау

Есептеу техникасында, бинарлық сандық жүйелерде теріс сандарды кодтау үшін қол қойылған сандық өрнектемелер қажет. Математикада, кез келген сан негізіндегі теріс сандар минус белгісімен ("−") басында көрсетіледі. Дегенмен, RAM немесе CPU тіркемелерінде сандар тек биттер тізбегі түрінде бейнеленеді, қосымша символдарсыз. Бинарлық сандық жүйені қол қойылған сандарды көрсету үшін кеңейтудің ең белгілі төрт әдісі: белгі-мөлшері, біртінші толықтыру, екілік толықтыру және смещенный бинарлық. Кейбір балама әдістерде ашық белгілердің орнына жасырын белгілер қолданылады, мысалы, теріс екілік, −2 негізін пайдаланады. Оң, теріс, бөлшектік немесе осы тақырыптарға қатысты басқа да түрлендірулер үшін басқа негіздерге де сәйкес әдістерді құруға болады. Кез келген өрнектемелердің қайсысының жалпылама артық екенін анықтайтын нақты критерий жоқ. Бүтін сандар үшін, қазіргі есептеу құрылғыларының көпшілігінде екілік толықтыру қолданылады, бірақ Unisys ClearPath Dorado сериялы серверлері біртінші толықтыруды пайдаланады.

Тарих

Цифрлық есептеудің алғашқы күндері аппараттық технология және математикалық технология (номерлеу жүйелері) бойынша бәсекелес идеялармен ерекшеленді. Басты пікірталастардың бірі теріс сандардың форматы болды, сол дәуірдегі жетекші сарапшылардың көптегені өте қатаң және әртүрлі пікірлер білдірді. Бір топ екілік толықтыруды қолдады – бүгінде басым жүйе. Тағы бір топ бірлік толықтыруды қолдады, онда теріс мән оның оң мәніндегі барлық биттерді инверсиялау арқылы құралады. Үшінші топ белгі-шама жүйесін қолдады, онда мән оңнан теріске қарапайым түрде сөздің ең жоғары ретті бітін ауыстыру арқылы өзгереді. Әрбір жүйе үшін жақтастар мен қарсыластар болды. Белгі-шама жүйесі 1960 жылдары кең таралған процесс болған жадтың құлағандарын (memory dumps) оңай іздеуге мүмкіндік берді, себебі кішкентай сандық мәндерде 1 биттердің саны аз болды. Бұл жүйелер ішкі түрде бірлік толықтыру арқылы есептеулер жүргізді, сондықтан сандар тізілімнен математикалық процессорға жіберілгенде бірлік толықтыру мәндеріне айналдырылып, нәтиже тізілімге қайтарылғанда қайтадан белгі-шамаға түрлендірілуі керек еді. Бұл жүйелерге басқа жүйелерге қарағанда көбірек логикалық элементтер (gates) қажет болды, бұл дискретті транзисторлардың құны мен орналастыруы маңызды болған кезде үлкен мәселе болып табылды. IBM осы жүйенің ерте жақтастарының бірі болды, олардың 704, 709 және 709x сериялы компьютерлері оны қолдануда ең танымал жүйелердің бірі болды. Бірлік толықтыру аппараттық құрылымды біршама қарапайым етуге мүмкіндік берді, себебі математикалық процессорға және одан мәндерді түрлендірудің қажеті болмады. Бірақ ол белгі-шама жүйесімен бірге жағымсыз ерекшелікті де бөлісті: теріс нөлді (-0) бейнелеу мүмкіндігі. Теріс нөл оң нөл сияқты әрекет етеді: есептеуде операнд ретінде қолданылғанда, операнд оң немесе теріс нөл болса да нәтиже бірдей болады. Бұл кемшілік, бір мәннің екі түрінің болуы нөлге теңдігін тексеру кезінде екі салыстыруды талап етеді. Бірлік толықтыру арқылы алу (borrow) операциясы да болуы мүмкін (төменде сипатталған). Бұл қосу және алу логикасын күрделендіреді, немесе керісінше, оны қарапайым етеді, себебі алу үшін екінші операндтың биттерін қосушыға жібергенде инверсиялау жеткілікті. PDP 1, CDC 160 сериясы, CDC 3000 сериясы, CDC 6000 сериясы, UNIVAC 1100 сериясы және LINC компьютері бірлік толықтыруын қолданды. Екілік толықтыру аппараттық құрылымда іске асыру үшін ең оңайы болып табылады, бұл оның кең таралған танымалдылығының басты себебі болуы мүмкін. Алғашқы мейнфреймдердегі процессорлар көбінесе мыңдаған транзисторлардан тұрды, сондықтан транзисторлардың маңызды бөлігін жою үлкен үнемдеуге әкелді. IBM System/360, GE 600 сериясы, PDP 6 және PDP 10 сияқты мейнфреймдер, сондай-ақ PDP 5 және PDP 8, PDP 11 және VAX машиналары сияқты миникомпьютерлер екілік толықтыруды қолданды. Алғашқы интегралды схемаларға негізделген процессорлардың (Intel 8080 және т.б.) архитекторлары да екілік толықтыруды таңдады. Интегралды схемалар технологиясы дамыған сайын, екілік толықтыру технологиясы барлық процессорларда қабылданды, соның ішінде x86, m68k, Power ISA, MIPS, SPARC, ARM, Itanium, PA RISC және DEC Alpha.

Басқа жүйелер

Google протоколының буферлеріндегі "зигзаг кодтау" – бұл таңбалы санға ұқсас жүйе, бірақ таңбаны көрсету үшін ең кіші мәнді бит қолданылады және нөлдің бір ғана өрнегі бар. Бұл теріс емес (белгісіз) бүтін сандарға арналған өзгермелі ұзындығы сандық кодтауды, белгілі бүтін сандар үшін тиімді пайдалануға мүмкіндік береді. Осыған ұқсас әдіс, Advanced Video Coding/H.264 және High Efficiency Video Coding/H.265 видеоқысу стандарттарында экспоненциалдық Голомб кодтауын теріс сандарға дейін кеңейту үшін қолданылады. Бұл кеңейтуде ең кіші мәнді бит, дерлік таңба биті болып табылады; нөлдің ең кіші мәнді биті (0), барлық теріс сандардың ең кіші мәнді битімен бірдей. Бұл таңдаудың нәтижесінде, ең үлкен шамадағы оң сан, ең үлкен шамадағы теріс саннан бірге артық болады, екілік толықтырудан немесе Google протоколының зигзаг кодтауынан өзгеше. Тағы бір тәсіл – әр цифрға таңба тағайындау, яғни таңбалы цифрлық өрнектерді қолдану. Мысалы, 1726 жылы Джон Колсон өрнектерді "кіші сандарға" – 1, 2, 3, 4 және 5 сандарына дейін азайтуды ұсынды. 1840 жылы Огюстен Коши есептеулердегі қателерді азайту үшін мұндай өзгертілген ондық сандарды қолдануды жөн көретінін айтты.