Einfache Frage bezügl. "logisches Oder"

DeChecka

Erfahrenes Mitglied
Hi Leute!
Ich hab jetzt mal eine Programmierübung gemacht, wovon ein Teil so aussieht:
Code:
 int ergebnis;
   cout<<"Jetzt liegen "<<anzahlDerMuenzen<<" Muenzen auf dem Tisch."<<endl;
   cout<<"Wieviele moechten Sie nehmen? ";
   cin>>ergebnis;
   while(ergebnis<1 | ergebnis>3)
   {
   cout << "Bitte geben Sie eine Zahl von 1-3 ein!\n";
   cin>>ergebnis;
   }
   cout << "Sie haben " << ergebnis << " Muenzen genommen" << endl;
   cout << "Jetzt liegen " << anzahlDerMuenzen - ergebnis << " Muenzen auf dem Tisch" << endl;

In der Lösung wird aber statt diesem einfachen "|"
dieses zweifache "||" verwendet...
Desweiteren wird auch im Zusammenhang mit dem logischen Oder immer von "||" gesprochen.
Mein Program funktioniert aber trotzdem so, wie ich es mir vorstelle...
Gibt es da also keinen Unterschied, oder hat das einfach "|" doch eine andere Bedeutung?

MfG
DeChecka
 
Das einfache Pipe ist ein "exklusives Oder". Der große Unterschied ist, dass es ein Bit- und kein logischer Operator ist. Die zwei Pipes dagegen repräsentieren das logische Oder. Es gibt hier zwar das gleiche Ergebnis, doch solltest du unbedingt in solchen Abfragen, die zwei Pipes verwenden.

Mehr Infos sollten dir eigentlich dein Programmierbuch oder das Internet bieten.
 
"||" ist ein logisches Oder, wie du es verwenden solltest.
"|" ist ein bitweises Oder, mit dem du Variablen bitweise untersuchst.

Du hast z.B. zwei Integers: 0x0001 und 0x0002. Binär sehen die so aus: 0001 und 0010.
Wenn du (0x0001 || 0x0002) machst, bekommst du als Ergebnis 1, weil beide ungleich 0 sind.
Wenn du jedoch (0x0001 || 0x0002) machst, bekommst du 3 raus.
Weil:
0001 | 0010 = 0011 = 0x0003.

Benutzt wird das ganze meist bei der Benutzung von Flags. Dabei kannst du z.B. in einem 32 bit unsigned int 32 bool Parameter speichern.
 
Ok, danke Jungs!
Auch wenn ich das mit dem bitweise noch net versteh, ich weiß jetzt trotzdem Bescheid! :)

Danke!

MfG
DeChecka
 
Ok, danke!

Kurz noch 'ne Frage nebenbei:
Ich hab gelesen, dass man beim Schreiben in eine Datei den Spezifierer "ios::nocreate" angeben kann...
Allerdings geht es bei mir sowohl mit "ios_base::nocreate" nicht als auch mit "ios::nocreate"...
Weiß einer, an was das liegen kann?
Muss ich da 'ne besondere Header-Datei mit einbinden?

MfG
DeChecka
 
moin


Möglicherweise musst du den Namespace mit angeben.
std::ios_base::nocreate

Du machst ja leider keine angaben womit du programmierst.


mfg
umbrasaxum
 
Ja, sorry...

Dev C++!

Namespace hab ich auch schon versucht, geht leider auch nicht!

Code:
std::ofstream fout(chartn, std::ios_base::nocreate);

Das ist mein Code...

Der Compiler meldet "nocreate is not a member of std::ios_base"...
Das wundert mich ehrlich gesagt schon...

MfG
DeChecka
 
moin


Hab grad mal nachgesehen:
MSDN hat gesagt.:
In addition to the above changes, the following functions, constants, and enumerators that are elements of the old iostream library are not elements of the new iostream library:

attach member function of filebuf, fstream ifstream, and ofstream
fd member function of filebuf, fstream ifstream, and ofstream
filebuf::eek:penprot
filebuf::setmode
ios::bitalloc
ios::nocreate
ios::noreplace
ios::sync_with_stdio
streambuf::eek:ut_waiting
streambuf::setbuf (use rdbuf -> pubsetbuf for the same behavior)

Auf deutsch: nocreate gibt es nicht mehr!


mfg
umbrasaxum
 

Neue Beiträge

Zurück