Zdravím, po delší době sem se konečně dostal k programování a nerozumím využití typu BOOL. Můžete mi prosím pro příklad uploadnout nějaký jednoduchý zdrojový kód s jeho využitím?
Děkuji.
#1 Nadšenec
Nechce se mi to psat takze :
bool
Je standardní příkaz Céčka, který se píše před názvem nové proměnné a říká překladači, aby alokoval v paměti místo pro uložení jedné informace typu bool. Bool je speciální logická proměnné, která může nabývat pouze dvou stavů. PRAVDA-NEPRAVDA, jinak řečeno true-false nebo přímo logicky 1-0. Z této skutečnosti vyplívá, že pro uložení takové informace nám stačí pouze 1 bit. Záleží na překladači, zda spojí více (max 8) proměnných typu bool a bude je alokovat na jedné adrese (Byte). Zpravidla je bool alokován jako int, tedy zabírá jeden bajt, který je využit jen z jedné osminy. Pro false ukládá 0 a pro true ukládá 1.
Formát deklarace proměnné
bool stav;
Nastavuje proměnnou typu bool s jedinečným názvem stav pro programátora a překladač.
Co je důležité:
Překladač registruje název stav, který musí být jedinečný. Prezentuje pouze false nebo true.
Překladač bude aplikovat matematické vyjádření jako false=0, ostatní true;
Překladač pracuje s obsahem adresy prezentující bool, jako s int.
POZNÁMKA: překladač není správný pojem, neboť při spuštění kompilovaného programu je mimo hru
Specifika bool
Bool je z logického hlediska dvoustavový, jako pravda a nepravda. Jeho fyzické uchování se provádí na jedné adrese, která může představovat 256 rozdílných stavů. S výhodou lze této skutečnosti využít pro přenos doplňujících informací, jako např. číslo chyby při erroru apod. Logicky se hodnota rozdělí na nulovou a nenulové, kde platí jako false a true +např. 33.
Zvláštním případem je pak vytvoření (ne příliš vhodně řečeného) bitového řetězce či pole jako stavy[]. Jedná se opět jen o klasické pole prvků int, které respektují binární logiku jako nulové a nenulové hodnoty obsahů adres.
bool stav1; //alokuje 1 bit ale neinicializuje
bool stav2=false; //alokuje 1 bit a inicializuje na 0
bool stavy[]={1,0,0,1,0,1}; //alokuje 6 bitů a inicializuje
cout<<stav1<<endl; //náhodný stav (1 nebo 0)
cout<<stav2<<endl; //vypíše 0, jako false
cout<<stavy[0]<<"_"; //1_
cout<<stavy[1]<<"_"; //0_
cout<<stavy[2]<<"_"; //0_
cout<<stavy[3]<<"_"; //1_
cout<<stavy[4]<<"_"; //0_
cout<<stavy[5]<<endl; //1
getchar(); //čekání na entr
return 0; //opuštění konzolové aplikace
Program deklaruje tři logické proměnné stav. PC ovšem alokuje tři adresy. Stav1 je pouze alokován, ale není přímo určen stav. PC určil nějakou adresu, která má z předchozích operací libovolnou hodnotu. S velkou pravděpodobností asi nenulovou. Cout by nám tak mohl vypsat true jako 1. Stav2 alokuje paměť a ještě je modifikuje na false. Fasle je jedinečná nulová hodnota, proto je na danou adresu zapsána hodnota 0. Ta je potom i vypsána pomocí cout. Proměnná stavy vytváří pole či řetězec logických stavů, ke kterým lze přistupovat pomocí indexů. Do cout vstupuje bool jako obsah adresy, který je nulový či nenuloví. Cout ví, že pro nulovou hodnotu obsahu adresy má generovat znak „0“ , pro vše ostatní znak „1“.
Zdroj http://amapro.cz
Atheo
Typ BOOL sa pouziva hlavne vo winapi ktore je napisane v standarte ktory este nemal typ bool. Je to v podstate typedef na int.
#1 Nadšenec
Ahoj, bool je typ proměnné, může obsahovat 2 hodnoty "false" a "true". Použít se dá stejně jako indikační bit když potřebuješ někde přepnout stav.
např.:
bool neg = false; /* if there is '-' before number "-3", neg is set to True, if the number is above 0, it remains false. */
if(some_array[0]=='-') {neg = true;}
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku