www.amapro.cz & David Bazala [Programování]

Otevře webové stránky AmaPro


Otevře hlavní stránku společnosti AmaPro
Internetové stránky určené pro studenty středních a vysokých odborných škol.


amapro.cz/odkazy Projekt eliminuje vyhledávání klíčových slov na komerčních stránkách a v e-schopech.



Nový projekt AmaPro

 

signed

 

Příkaz signed je standardní příkaz Céčka, který funguje jako typové doplnění kvalifikace proměnné. Je analogií příkazu unsigned. Signed je implicitní pro všechny typy proměnné a proto jeho psaní můžeme vynechat. Překladač ho doplní za nás. Signed říká překladači, že proměnná bude znaménkové, které může nabývat kladné i záporné hodnoty.

 

Obecná syntaxe signed:

 

signed int A;                

signed long B;             

signed char C;    

 

Specifika syntaxe signed:

 

signed int A je jako int A;

signed char B je jako char B;

signed long int C je jako long C;

 

Překladače povolují určitá specifika pro zkrácení syntaxe. Implicitně jsou zkrácené pro datový typ int.

 

Při specifikaci proměnné na typ signed přistupuje procesor k obsahu a interpretaci hodnoty jinak než u typu unsigned. Ačkoliv se vždy alokuje stejný počet bajtů, používá se u signed nejvyššího bitu pro určení znaménka hodnoty. Lze tedy interpretovat hodnoty:

 

00000000 Bin                     00 Hex                   0 Dec

01111111 Bin                     7F Hex                   127 Dec

ale

10000000 Bin                     80 Hex                   -128 Dec  //interpret. jako negace !(10000000) což je 01111111

11111111 Bin                     FF Hex                   0  Dec      //interpret. jako negace !(11111111) což je 00000000

 

pro jednu paměťovou buňku (1 Byte)

 

Při tendencích překračování povolených hodnot procesor nehlásí chybu, ale dochází k tzv. přetékání a podtékání. Na rozdíl od unsigned se jedná o jakousi hranici středu velikosti bajtového rozsahu, kde k přetékání a podtékání dochází.  Jedná se jednoduše o to,  že po dosažení maximální hodnoty se přechází k čítání od hodnoty minimální. Pro unsigned je minimální hodnota 0, ale u signed je např. –128, -32768, -2147483648, dle počtu bajtu pro datový typ.

 

 

 

PŘÍKLAD: signed_1

signed char znak;                                //alokace 1 Byte jako int

znak =126;                                            //inicializace na 01111110 Bin

cout<<(int)znak<<endl;                     // 126 jako 01111110 Bin

znak++;                                                 //zvýšení o jedna

cout<<(int)znak<<endl;                     // 127 jako 01111111 Bin

znak++;                                                 //zvýšení o jedna PŘETÍKÁ

cout<<(int)znak<<endl;                     // -128 jako !(10000000) Bin

znak++;                                                 //zvýšení o jedna

cout<<(int)znak<<endl;                     // -127 jako !(10000001) Bin

znak++;                                                 //zvýšení o jedna

getchar();                                             //čekání na entr

return 0;                                                //výstup z konzolové aplikace

 

Příklad demonstruje přetečení hodnoty signed char. Pro proměnnou znak je alokována paměť o velikosti 1Byte a přistupovat se k ní bude se signed (znaménkovou) notací. Proměnná znak je inicializována na hodnotu +126, která binárně představuje 01111110. Znak je čítán směrem nahoru a aktuální hodnota je vypisovaná cout. Dosažením hodnoty +127 se proměnná dostává do svého maxima a další znak++ vyvolá přetečení na hodnotu minima, což je –128. –128 je prezentováno v RAM jako 80 Hex, 10000000 Bin. Ale procesor ví, že k Byte přistupuje signed a provede přepočet a to tak, že celý obsah neguje. Hodnota –128 je dána negací !(10000000) což je 01111111. Dále se čítá nahoru znak++, až do 11111111, což je po přepočtu 00000000 Bin, tedy 0 Dec.

 

 

PŘÍKLAD: signed_2

signed int cislo;                                  //alokuje 4 byte jako int

cislo =2147483646;                              //inicializuje na 7F FF FF FE Hex

cout<<cislo<<endl;                            // 2147483646 Dec jako 7F FF FF FE Hex

cislo++;                                 //příčítá o jedna

cout<<cislo<<endl;                            // 2147483647 Dec jako 7F FF FF FF Hex

cislo++;                                 //příčítá o jedna a PŘETÍKÁ

cout<<cislo<<endl;                            //-2147483648 Dec jako !(80 00 00 00) Hex

cislo++;                                 //příčítá o jedna

cout<<cislo<<endl;                            //-2147483647 Dec jako !(80 00 00 01) Hex

cislo++;                                 //příčítá o jedna

getchar();                              //čeká na entr

return 0;                                //výstup z konzolové aplikace

 

Příklad demonstruje přetečení hodnoty signed int. Pro proměnnou cislo je alokována paměť o velikosti 4 Byte a přistupovat se k ní bude se signed (znaménkovou) notací. Proměnná cislo je inicializována na hodnotu +2147483646, která hexadecimálně představuje 7F FF FF FE. Cislo je čítán0 směrem nahoru a aktuální hodnota je vypisovaná cout. Dosažením hodnoty +2147483647  se proměnná dostává do svého maxima a další cislo++ vyvolá přetečení na hodnotu minima, což je –2147483648. –2147483648 je prezentováno v RAM jako 80 00 00 00 Hex, 10000000 Bin. Ale procesor ví, že k Bytům přistupuje signed a provede přepočet a to tak, že  obsahy neguje. Hodnota –2147483648 je dána negací !( 10000000000000000000000000000000) což je 0111111111111111111111111111111111.  Dále se čítá znak++, na hodnotu  –2147483647, což je jako negované !(80 00 00 01).

 

 

 



Abecední seznam všech článků Vyhledání pojmů ve článcích




Popis jazaka C
Průvodce příkazy programovacího jazyka C.
programovani/jazyk_c
Hybridní počítače
Počítače, jejichž základem je standardní analogová počítací síť.
knihy/hybridni_pocitace
Zapojení kabelů
Popis vývodů a křížení různých propojovacích kabelů
konektory.php
Databáze ikon
Ikony a malé obrázky pro tlačítka či jiné použití
datove_zdroje/icony/icony.php
Programování PHP
Články o programování webových stránek pomocí PHP.
internet/katalog_programovani_php
JavaScript - ukázky
Příklady užití některých často používaných efektů na stránky.
katalogy/javascript
Mikropočítače
Seznámení s obecnou problematikou počítačů a mikropočítačů.
programovani/mikropocitace
Weby o programování
Odkazy na velké servery o programování a vývoji SW
odkazy/programovani
Animované obrázky
Animované gify a malé obrázky pro všeobecné využití.
datove_zdroje/animace
Otevře stránky Fulltextové vyhledávání na celém serveru
Digitalizované odborné knihy
Velká encyklopedie pojmů a zkratek
Česko - anglicko - německý technický slovník
Klasický katalog firem, služeb a stránek
OnLine překladač  vět a textů (nepoužívá Google)
Stránky pro chvíle oddechu od studia, relaxace
Katalog českých firem dle technologií
Internetový odkazník
Otevře hlavní stranu pro oddíl programování




 Wikipedie   Seznam stránek   Kapitoly témat   Významné servery   Klíčová slova 








Otevře hlavní stranu společnosti AmaPro

Všechna práva vyhrazena. Určeno jen pro osobní využití. Bez předchozího písemného souhlasu správce www.amapro.cz je zakázána jakákoli další publikace, přetištění nebo distribuce jakéhokoli materiálu nebo části materiálu zveřejněného na www.amapro.cz a to včetně šíření prostřednictvím elektronické pošty. Články, jejichž přímým autorem není amapro.cz lze publikovat pouze se souhlasem jejich majitelů či administrátoru příslušného webu.