Podepsanost - Signedness

V oblasti výpočetní techniky je podepsanost vlastností datových typů představujících čísla v počítačových programech. Číselná proměnná je podepsána, pokud může představovat kladná i záporná čísla, a bez znaménka, pokud může představovat pouze záporná čísla (nulová nebo kladná čísla).

Protože čísla se znaménkem mohou představovat záporná čísla, ztrácejí řadu kladných čísel, která mohou být reprezentována pouze čísly bez znaménka stejné velikosti (v bitech), protože zhruba polovina možných hodnot jsou kladné hodnoty, zatímco příslušný typ bez znaménka může věnovat všechny možné hodnoty do kladného číselného rozsahu.

Například, dvě části podepsané 16-bitové celé číslo může držet hodnoty -32768 do 32767 souhrnně, zatímco bez znaménka 16 bitů celé číslo může držet hodnot 0 až 65535 . U této metody reprezentace znaménka označuje bit úplně vlevo ( nejvýznamnější bit ), zda je hodnota kladná nebo záporná (0 pro kladné, 1 pro záporné).

V programovacích jazycích

Pro většinu architektur neexistuje ve strojovém jazyce rozdíl mezi podepsaným a nepodepsaným typem . Nicméně aritmetické instrukce obvykle nastavují různé příznaky CPU , jako je příznak přenosu pro aritmetiku bez znaménka a příznak přetečení pro podepsané. Tyto hodnoty lze vzít v úvahu následnými větvovými nebo aritmetickými příkazy.

C programovací jazyk , spolu s jeho deriváty, implementuje znaménkovost pro všechny integer datové typy , stejně jako pro „charakter“ . U celých čísel definuje modifikátor bez znaménka typ, který má být bez znaménka. Výchozí celočíselná signatura je podepsaná, ale lze ji explicitně nastavit pomocí modifikátoru se znaménkem . Naproti tomu standard C prohlašuje, že znak char , unsigned char a char jsou tři odlišné typy, ale určuje, že všechny tři musí mít stejnou velikost a zarovnání. Dále musí mít znak stejný číselný rozsah jako podepsaný znak nebo nepodepsaný znak , ale výběr závisí na platformě. Celočíselné literály lze vytvořit bez znaménka s příponou U. Například 0x FFFFFFFF dává -1, ale 0xFFFFFFFFU dává 3229bitový kód 4 294 967 295.

Kompilátory často vydávají varování při porovnávání podepsaných a nepodepsaných čísel nebo při přetypování jednoho na druhé. Jedná se o potenciálně nebezpečné operace, protože rozsahy podepsaných a nepodepsaných typů se liší.

Viz také

externí odkazy

  • „Přehled číselných typů“ . MySQL 5.0 Reference Manual . mysql.com. 2011 . Vyvolány 6 January 2012 .
  • „Porozumět pravidlům převodu celých čísel“ , CERT C Coding Standard , tým počítačové nouzové reakce , načteno 31. prosince 2015