Jak używać zmiennej bool?

0

Witam nie wiem jak dokładnie użyć zmiennej bool. Proszę jeśli ktoś może, żeby wyjaśnić mi to na tym przykładzie z góry dziękuję.

#include <iostream>
int main()
{
    bool porownanie = 123 >= 321;
   
    std::cout << "porownanie = " << porownanie << std::endl;
    std::cout << "porownanie = " <<( 111 != 222 ) << std::endl;
    std::cout << "porownanie = " <<( 777 == 777 ) << std::endl;
    std::cout << "porownanie = " <<( 777 < 777 ) << std::endl;
    return 0; 
}
1
#include <iostream>

int main()
{
    bool porownanie = 123 >= 321;
    if (porownanie)
		std::cout << "zyje w dziwnej rzeczywistosci\n";
	else
		std::cout << "ok, normalna matematyka\n";
   
    std::cout << "porownanie = " << std::boolalpha << porownanie << std::endl;
    std::cout << "porownanie = " <<( 111 != 222 ) << std::endl;
    std::cout << "porownanie = " <<( 777 == 777 ) << std::endl;
    std::cout << "porownanie = " <<( 777 < 777 ) << std::endl;
    
    return 0;
}

boolalpha służy do wypisywania true i false zamiast 1 i 0.

0

Ok, fajnie, ale mi chodzi głównie jak tego użyć tak normalnie(czyli takie podstawowe info o tej zmiennej), a nie jak zamienić 1 i 0 na true i false :D

0

@Zigo427 - no przecież użyłeś sobie tego normalnie; Zadeklarowałeś sobie zmienną typu logicznego, wpisałeś do niej wartość, a na koniec użyłeś znów podczas wyświetlania tekstu w konsoli;

Zapytaj konkretnie, bo i naczej nikomu nie będzie się chciało domyślać;

[...] a nie jak zamienić 1 i 0 na true i false :D

Ale to nie jest żadna zamiana - to co masz w konsoli ma służyć jedynie dla użytkownika, w pamięci nadal masz zmienną logiczną (czyli de facto liczbę); Zamiana jednego typu na inny to tzw. konwersja, ale to coś innego niż to co masz na myśli.

0

bool to po prostu typ zmiennej, która może przechowywać jedynie 0 lub 1. Jeżeli zapiszemy do zmiennej bool wartość inną niż 0 (NULL) lub 1, wartość ta zostanie skonwertowana do 1. rozmiar boola jest implementation defined i nie zawsze musi mieć sizeof(bool) == 1.

A używasz tego jak zwykłej zmiennej, której wartości zawsze będą równie 0 lub 1.

0

Zmienna bool przyjmuje 2 wartości: 1 i 0 co jest odpowiednikiem true i false. Jak wpiszesz do zmiennej bool wartość różną od 0, NULL lub false, będzie ona miała wartość true:
Przykład:

 bool x=1;
x=true;
x=1234;

Trzy te zapisy tak samo wpływają na zawartość zmiennej bool(wartość prawdziwa) tak samo jak:

 bool x=0;
x=NULL;
x=false;

(wartość fałszywa).

0

Jak rozumiem autorowi chodzi o przykład z życia wzięty. np piszesz gdzieś skomplikowany warunek ale powinieneś go użyć w kilku miejscach, więc zamiast kopiować kod warunku przypisujesz do zmiennej i tylko tę zmienną używasz w kolejnych miejscach. Inna sytuacja to tzw flagi np dające stan np w bazie danych kolumna deleted o typie bool poinformuje czy konto jest usunięte czy nie.

0

Ale mi chodzi jak? Po co? Dlaczego? I w jakich sytuacjach tego używać? Niech ktoś mi odpowie tak jakby to tłumaczył osobie totalnie początkującej w programowaniu :D

0

Możesz na przykład w strukturze trzymać jakieś informacje

struct person
{
    char *name;
    bool is_handsome;
    bool has_girlfriend;
}

Później sobie wypełniasz taką strukturkę na przykład z pliku i korzystasz.

if (person.is_handsom)
     person.has_girlfriend = true;

Generalnie w C nigdy nie było prawdziwego boola i ludzie świetnie radzą na typie int, zwłaszcza że wszystkie operacje warunkowe w assemblerze to i tak 0 to fałsz, a każda inna wartość to prawda. W C++ bool i tak jest zaimplementowany co najmniej jako char, tylko kompilator zawsze zapewni, że będzie tam 0 albo 1.

W C++ bool używasz aby przekazać swoje intencje innemu programiście, jeżeli funkcja zwraca bool to wiemy żeby się spodziewać prawdy albo fałszu, gdyby zwracała int, to czasami mogłoby to nie być już takie jasne.

Nie wiem jakich innych przykładów użycia jeszcze chciałbyś dostać odnośnie typu bool

0

typ bool
Tego typu najczęściej używamy w warunkach instrukcji warunkowych, warunkach pętli, do ustawiania flag (std::vector<bool> itp.)

#include <iostream>
using namespace std;

bool isAdult(int age)
{
    return age >= 18;
}

int main()
{
    cout << "Ile masz lat?\n";
    int yourAge;
    cin >> yourAge;

    if (isAdult(yourAge)) {
        cout << "Jestes pelnoletni\n";
    }
    else {
        cout << "Jestes niepelnoletni\n";
    }
} 
0

Kilka osób napisało nie do końca prawdę, która w przyszłości może sprawić problemy. Otóż, jeśli chodzi o C++, to bool to nie tylko 0 lub 1. Zmienna tego typu może przyjmować różne wartości i np. nie możesz polegać na czymś takim:

 
bool b = true;
int i = (int)b;
if(i == 1)
{

}

Po rzutowaniu może się okazać, że dostałeś 232, a nie 1 jak się spodziewałeś. Chodzi o to, że przy takim rzutowaniu możesz polegać jedynie na wartości 0. Bo jeśli bool ma wartość 0, to wtedy na pewno jest false. W każdym innym przypadku da true.

2
Juhas napisał(a):

Kilka osób napisało nie do końca prawdę, która w przyszłości może sprawić problemy. Otóż, jeśli chodzi o C++, to bool to nie tylko 0 lub 1. Zmienna tego typu może przyjmować różne wartości i np. nie możesz polegać na czymś takim:

 
bool b = true;
int i = (int)b;
if(i == 1)
{

}

Po rzutowaniu może się okazać, że dostałeś 232, a nie 1 jak się spodziewałeś. Chodzi o to, że przy takim rzutowaniu możesz polegać jedynie na wartości 0. Bo jeśli bool ma wartość 0, to wtedy na pewno jest false. W każdym innym przypadku da true.

Całkowita bzdura.

Konwersja bool na int może dać tylko dwie wartości - 0 albo 1. (ISO/IEC 14882:2014 4.7/4)

http://melpon.org/wandbox/permlink/BfhNaJNJvELUMiu2

0
Juhas napisał(a):

Kilka osób napisało nie do końca prawdę, która w przyszłości może sprawić problemy. Otóż, jeśli chodzi o C++, to bool to nie tylko 0 lub 1. Zmienna tego typu może przyjmować różne wartości i np. nie możesz polegać na czymś takim:

 
bool b = true;
int i = (int)b;
if(i == 1)
{

}

Po rzutowaniu może się okazać, że dostałeś 232, a nie 1 jak się spodziewałeś. Chodzi o to, że przy takim rzutowaniu możesz polegać jedynie na wartości 0. Bo jeśli bool ma wartość 0, to wtedy na pewno jest false. W każdym innym przypadku da true.

Nie zgadzam się. Kompilator nie pozwoli aby w typie bool, było coś innego niż 0 lub 1.

Jak zrobisz coś takiego

extern int a;
bool b = a;

To kompilator wygeneruje dodatkowy kod sprawdzający czy w a coś jest, jak nie to ustawia 0 do b, gdy jest tam cokolwiek innego wstawia 1. Robi to za pomocą instrukcji setne lub podobną.

Z kolei jak zrobisz bool b = 6 to kompilator przerobi to tak, jakbyś zrobił bool b = 1

0

OK, na swoją obronę mam, że moja wiedza pochodzi ze starej książki Grembosza i faktycznie od tamtej pory mogło się sporo zmienić. Natomiast jeśli chodzi o typ BOOL (pisany wielkimi literami) z MFC, to jest tak jak pisałem. Inna sprawa, że to nie jest typowy bool, ale może wprowadzić w błąd. Dlatego też przynajmniej przy MFC'owym BOOL trzeba na to zwracać uwagę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1