Podepsat bit

V informatice je znakový bit nebo znakový bit ( anglicky  sign bit ) bit označující znak čísla [1] . Pouze číselné typy se znaménkem mají znaménkový bit , je vždy na pozici nejvýznamnějšího bitu , v určitých kontextech se výraz "bit znaménka" používá ve smyslu "nejvýznamnější bit". Obvykle, pokud je znaménkový bit 0, je číslo nezáporné (kladné nebo nulové), a pokud je znaménkový bit 1, pak je číslo záporné [1] . Za tímto zápisem číselného znaku následuje nejběžnější přímý ( angl.  sign-and-magnitude ), reverzní ( angl.  one's doplněk ) a další ( ang. dvojkový  doplněk ) kódy čísel, nejběžnější v práci na počítači .

Ve schématech zpracování čísel s plovoucí desetinnou čárkou jsou na rozdíl od schémat s pevnou řádovou čárkou při reprezentaci čísel potřeba dva bity znaménka: jeden k reprezentaci znaménka mantisy , druhý k reprezentaci znaménka řádu. Při použití upraveného reverzního a doplňkového kódu se znak čísla zobrazuje také jako dvoumístný kód „00“, v případě nezáporných čísel, a jako kód „11“ - v případě záporných čísel . čísla . To umožňuje snadno určit situaci, ve které došlo k přetečení bitové mřížky stroje (příznakem přetečení je přítomnost kódu "01" nebo kódu "10" ve znakovém bitu).

Při provádění operací sčítání ( odčítání ) se znaménko výsledku získává automaticky, protože do operace nejsou zapojena samotná čísla, ale jejich kódy (včetně kódu znaménka). Při operacích násobení ( dělení ) je znaménko výsledku určeno sečtením kódů znaménkového bitu násobiče a násobitele ( dělenec a dělitel ) mod 2.

Rozsah reprezentace čísel se znaménkem

Protože nejvýznamnější číslice čísla je zodpovědná za znaménko, lze jako číslice čísla použít pouze n-1 číslic [2] . Jednobajtová čísla se znaménkem mají tedy pouze 7 digitálních bitů, dvoubajtová čísla mají 15 digitálních bitů atd. V přímých a zpětných kódech je rozsah reprezentace čísel symetrický k nule, tj. záporná čísla se rovná počtu kladných čísel. Například jednobajtové dopředné a zpětné kódy mohou představovat čísla v rozsahu -127 ... + 127. V těchto kódech dochází k takzvané " nule se znaménkem " , tedy k různým reprezentacím čísel "plus nula" a "mínus nula", z nichž druhý neodpovídá matematickému pojetí záporného čísla. V dvojkovém doplňkovém kódu má nula pouze jeden kód, takže rozsah reprezentace čísel není symetrický vzhledem k nule. Jednobajtový dvojkový doplněk tedy představuje čísla v rozsahu -128 ... + 127.

Změna znaménka čísla v různých kódech

V přímém kódu znaménkový bit označuje znaménko čísla a číslicové bity obsahují binární číslice čísla. Pro změnu znaménka čísla v přímém kódu stačí změnit pouze znaménkový bit.

+58 = 00111010 -58 = 10111010

V obráceném kódu znaménkový bit označuje znaménko čísla a numerické bity obsahují číslice čísla pro kladná čísla a převrácenou hodnotu číslic pro záporná čísla. Chcete-li změnit znaménko čísla, musíte převrátit všechny bity čísla.

+58 = 00111010 -58 = 11000101

V kódu doplňku dvojky znaménkový bit označuje znaménko čísla, číslicové bity kladného čísla obsahují číslice čísla a záporné číslo je doplněk 2 n , kde n je počet číslic. V praxi, chcete-li získat další kód, čísla přidají 1 k inverznímu kódu. Chcete-li změnit znaménko čísla doplňku dvojky, musíte převrátit všechny bity čísla a přidat 1.

+58 = 00111010 11000101 +1 -58 = 11000110

Čísla s plovoucí desetinnou čárkou , jako je formát IEEE , formát IBM , formát VAX a dokonce i formát používaný v počítačích Zuse Z1 a Z3 , používají přímé kódové reprezentace čísel. Chcete-li změnit znaménko čísla, stačí změnit bit znaménka.

Rozšíření znaménka

Pokud je nutné převést číslo dvojkového doplňku do širšího formátu, aniž by se změnila jeho číselná hodnota (například z jednoho na dva bajty), pak extra vyšší bity musí být vyplněny kopií bitu znaménka, proces tzv. rozšíření znaků [3] nebo šíření znaků. Například jednobajtové kladné binární číslo 00111010 rozšířené na dva bajty je zapsáno dvojkovým doplňkem jako 00000000.00111010 a záporné číslo 11000110 jako 11111111.11000110.

Procesory rodiny x86 mají speciální příkazy pro rozšíření znaménka CBW (převést bajt na slovo), CWD a CWDE (převést slovo na dvojslovo), CDQ (převést dvojslovo na čtyřslovo) a univerzální příkaz MOVSX (přesun s rozšířením znaménka) navržený tak, aby automaticky zvětšit formát čísla.

Viz také

Poznámky

  1. 1 2 Kovalyuk T.V. Základy programování. – 2005.
  2. David Tarnoff. Základy organizace a designu počítače. – 2011.
  3. Rudolf Marek. Assembler s příklady. - 2005. - S. 46.

Zdroje