Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [C++] waarde boolean variabele.  (gelezen 2139 keer)

Offline JV.com

  • Lid
  • Steunpunt: Nee
[C++] waarde boolean variabele.
« Gepost op: 2009/08/06, 13:33:32 »
Hallo iedereen,

ik heb een klein vraagje over een programmatje dat ik gemaakt heb in C++

#include <iostream>

using namespace std;

int main()
{
    bool            resultaat;
    unsigned short  waarde1 = 1;
    unsigned short  waarde2 = 0;

    cout << "resultaat \t" << resultaat << endl;
    resultaat = waarde1 > waarde2;
    cout << "resultaat: \t" << resultaat << endl;
}

mijn doel was om te zien wat er gebeurde met een waarde van een bool-variabele als ik het toewees aan een conditie. De output is zoals ik verwachte:

resultaat: 8
resultaat: 1


maar ik heb een vraagje over de weergave van 8 als ik resultaat aanroep. dit een is een boolwaarde en kent 2 types waarde(0/1 oftewel false/true). dus waarom 8. ik heb misschien al een vermoeden:

de waarde 8 wordt weergegeven omdat ik de variabele resultaat in initialiseer. dan wordt de waarde van resultaat dus wat om dat moment ik het geheugen op die positie staat.

klopt mijn vermoeden?

bedankt voor jullie hulp.

JV.com

Offline track

  • Lid
  • Steunpunt: Nee
Re: [C++] waarde boolean variabele.
« Reactie #1 Gepost op: 2009/08/06, 13:55:27 »
Hoi Jelte,

volgens mij heb je gelijk.  Kijk hier:  http://en.wikipedia.org/wiki/Boolean_data_type
Citaat
... Boolean values are commonly represented by integers in C programs. ...
... defined to return a signed integer (int) result, either zero (for false) or nonzero (for true).
(in het hoofdstuk "History")

Dus: 1. als er geen initialisatie is is de inhoud van dat stukje geheugen toevallig.  C(++) heeft geen automatische initialisatie.
en:  2. in C(++) is alles behalve "0" als "true" gedefiniërd. (dus niet alleen "1" !) "8" is dus niet verboden (wél ongebruikelijk).

Vriendelijke groet,

track

1Swat

  • Gast
Re: [C++] waarde boolean variabele.
« Reactie #2 Gepost op: 2009/08/06, 18:29:08 »
Ik heb je source gecompileerd en kreeg zelf dit uit: (execution time varieëerde tussen 0.000 s en 0.023 s)
resultaat       0
resultaat:      1

Process returned 0 (0x0)   execution time : 0.015 s
Press any key to continue.
Welke compiler gebruik je, en voor welk systeem?
Kijk ook eens de handleiding van je compiler door.
Ik gebruikte de GNU GCC compiler onder Windows (Tsja, het zij zo XD).

Offline JV.com

  • Lid
  • Steunpunt: Nee
Re: [C++] waarde boolean variabele.
« Reactie #3 Gepost op: 2009/08/07, 00:27:13 »
ik gebruik als ontwikkel programma code::blocks mijn compiler is GNU GCC dit alles draaiend onder Ubuntu.

ik dnek dat jouw output wel klopt omdat het geheugen dat gereserveert wordt voor de boolean variable resultaat gewoon simpelweg 0 is. omdat de boolean var niet initialiseert wordt krijgt deze puur de waarde die in het gereserveerde geheugen block staat.

grt JV.com

1Swat

  • Gast
Re: [C++] waarde boolean variabele.
« Reactie #4 Gepost op: 2009/08/07, 12:13:40 »
Een klein stukje uit 'How not to program in  C++',
Vindt de fout!

Program 4: Typical Initial Problem
A classic mathematical problem is to add the numbers 1 to 100. But this program seems come up with the wrong answer:

  1 /************************************************
  2  * A program to sum the numbers from 1 to 100   *
  3  * using a brute force algorithm.               *
  4  ************************************************/
  5 #include <iostream>
  6
  7 int main()
  8 {
  9     int sum;    // The running sum
 10     int count;  // The current number
 11
 12     for (count = 1; count <= 100; ++count)
 13         sum += count;
 14
 15     std::cout <<
 16         "The sum of the numbers " <<
 17         "between 1 and 100 is " <<
 18         sum << '\n';
 19     return (0);
 20 }



Spoiler:
Scroll Down:


























Answer 51: The programmer never bothered to initialize sum.
You [b]can't count on a uninitialized value containing anything[/b]. So sum may start out at 0, 5190, 123, 5, or something else.

What the programmer should have written is:

       9   int sum = 0;


Hetzelfde geld voor een bool waarde, die mag men ook niet vergeten te initialiseren!

Hoi Jelte,

volgens mij heb je gelijk.  Kijk hier:  http://en.wikipedia.org/wiki/Boolean_data_type
Citaat
... Boolean values are commonly represented by integers in C programs. ...
... defined to return a signed integer (int) result, either zero (for false) or nonzero (for true).
(in het hoofdstuk "History")

Dus: 1. als er geen initialisatie is is de inhoud van dat stukje geheugen toevallig.  C(++) heeft geen automatische initialisatie.
en:  2. in C(++) is alles behalve "0" als "true" gedefiniërd. (dus niet alleen "1" !) "8" is dus niet verboden (wél ongebruikelijk).

Vriendelijke groet,

track

1. Geen initialisatie -> random geheugen -> klopt.
2. C kent geen type bool, tenminste niet in de taal zelf gebouwd. Vaak wordt of zelf een bool type gedefinieerd of een integer gebruikt.
Maar C is niet C++!! In C++ is bool wel degelijk een standaard type! De waarde van een bool is of true of false! Kijk maar na met sizeof().
Elke compiler zal 1 bit aangeven dus zou 8 nooit mogen.
Het klopt dat false = 0 en true != false, maar dat geldt alleen voor "getallen", zoals bijvoorbeeld integers en de conversie van en naar dit soort data types.

Een bool met waarde [i]true[/i] wordt geconverteerd naar int -> waarde blijft 1
Een int met waarde 10 (of 100 of 8680, whatever :P) wordt geconverteerd naar bool -> waarde wordt 1 ([i]true[/i])
Een bool met waarde [i]false[/i] wordt geconverteerd naar int -> waarde blijft 0
Een int met waarde 0 wordt geconverteerd naar bool -> waarde blijft 0 ([i]false[/i])

Maar
bool booleanvar = 8;is fout.

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: [C++] waarde boolean variabele.
« Reactie #5 Gepost op: 2009/08/07, 12:48:33 »
Dan ook maar even my 2 cents:
- de uiteindelijke uitkomst van "resultaat" zal vaak compiler- en systeemafhankelijk zijn, aangezien het vaak de waarden op het base pointer register (bij x86 EBP) betreft, en de huidige waarden van dat register zijn vaak afhankelijk van de gegenereerde assembler code (of nadien machine-instructies) en van het systeem.
- de grootte van een bool in C++ is implementatie-afhankelijk, en wees jezelf ervan bewust dat sizeof de grootte in bytes teruggeeft, niet in bits
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline JV.com

  • Lid
  • Steunpunt: Nee
Re: [C++] waarde boolean variabele.
« Reactie #6 Gepost op: 2009/08/07, 14:09:40 »
Hallo Iedereen!

Bedankt voor jullie goede uitleg + voorbeelden. dit bevestigde dus mijn vermoedens.

De les voor vandaag is dus:

1. initialiseer altijd een variabele anders kan deze een onvoorspelbare waarde bevatten.
2. booleans geven alleen 0 false of true 1 terug, alle andere waarden zijn onbruikbaar.

dank voor jullie hulp.

grt,

JV.com