Jason. Cała informatyka w jednym miejscu!

Zanim rozpoczniemy czytankę, chcę powiedzieć o małej zmianie tematów artykułów. Z powodu ponownego wtrącenia się zajęć zdalnych u mnie na uczelni, nie dam rady w chwili obecnej kontynuować materiału o tablicach. Zostały jeszcze dwa wątki, które z przyczyn ode mnie niezależnych (nie wyrobię się po prostu) przesunę na ten weekend. Aby dać sobie nieco odetchnąć, postanowiłem w takim razie rozpocząć kolejny rozdział dotyczący wartości logicznych w języku C. Opowiem Wam jak sobie radzić w niektórych sytuacjach mających związek z wyrażeniami logicznymi, jeśli logiczny typ danych w języku C nie istnieje! To jest część pierwsza, czyli wyjaśnienie jaką wartością i jakim typem danych charakteryzuje się "prawda" i "fałsz" bez typu logicznego.

LOGICZNY TYP DANYCH W JĘZYKU C JAKO TAKI, NIE ISTNIEJE :O!

Zaskoczeni? Ci, co przyzwyczaili się do pisania w językach bardziej abstrakcyjnych to z pewnością. Skoro już napisałem takie stwierdzenie uważam, że powinniśmy wyjaśnić tę sprawę w jaki sposób język C może "identyfikować" prawdziwość jakiegoś wyrażenia bez użycia "booleana". No bo w pierwszej chwili to się wydaje absurdalne, bo jak inaczej jesteśmy w stanie rozróżnić zdanie prawdziwe od fałszywego :)? Tak się składa, że jesteśmy w stanie i zerkając na podstawowe typy danych, odpowiedź macie prawie przed nosem. Zanim wprowadzono standard C99 w 1999 roku gdy nie istniał logiczny typ danych w języku C, programiści stosowali proste "integery"! Za 0 podstawiali "fałsz", za 1 podstawiali "prawdę" i mieli gotowy "boolean"! Pomyślcie sami czy naprawdę trzeba czegoś więcej, żeby niskim kosztem przechować zmienną boolowską :D.

NAGA PRAWDA CZYM JEST "PRAWDA"

W porządku, wiemy już jak przed 1999 rokiem w języku C stosowało się karykatury logicznego typu danych. Gdy logiczny typ danych w języku C jeszcze nie istniał, w ten sam sposób odbywało się ustalanie wartości dla wyrażeń logicznych. Szczególnie instrukcje warunkowe, które akurat są niezmienne w tym przypadku. Ogólnie rzecz biorąc, w grę również wchodziła liczba całkowita, która stawała się albo zerem (gdy dane wyrażenie jest nieprawdziwe), albo jedynką (gdy dane wyrażenie jest prawdziwe). Natomiast NIE JEST prawdą, że tylko jedynka da na wyjściu "true". W elektronice TAK, definiując samodzielnie też ta sama wieloletnia konwencja wręcz nakazuje robić tak samo. Jednak logiczny typ danych w języku C, a raczej nasz "integer" gdy ma reprezentować "prawdę", wystarczy żeby był różny od zera! Każda inna wartość nawet zmiennoprzecinkowa, wprowadzona w środek warunku w instrukcji warunkowej, zwróci prawdę, a więc wykona instrukcje umieszczone w bloku. Zatem o wyborze jednej z wielu ścieżek decyduje liczba całkowita!

Skompilujcie sobie poniższy kod źródłowy i zobaczcie sami jak to jest interpretowane:

#include <stdio.h>

int main(void)
{
	if(1)
	{
		printf("Prawda w przypadku 1\n");
	}
	
	if(59)
	{
		printf("Prawda w przypadku 2\n");
	}
	
	if(86.32)
	{
		printf("Prawda w przypadku 3\n");
	}
	
	if(-100.0f)
	{
		printf("Prawda w przypadku 4\n");
	}
	
	if(0)
	{
		printf("Prawda w przypadku 5\n");
	}
	
	getchar();
	
	return 0;
}

To koniec pierwszej części. Drugą część znajdziecie pod tym linkiem.

PODOBNE ARTYKUŁY