E
Edzard Egberts
Guest
Heinz Saathoff wrote:
Bei dem Effekt bin ich mir sicher, bei meiner Erklärung nicht so. Kann
auch sein, dass der ! nur das Bit Null invertiert (halte ich sogar für
wahrscheinlicher als meine vorhergehende "komplett invertieren" Deutung,
weil das mit den Werten 0 / 1 besser hinkommt) und die Abfrage dann
wegen der anderen Bits durcheinander kommmt.
> Was würdest Du hier erwarten:
Ein Beispiel mit nicht initialisierten Bool-Werten.
bool a, b;
while (a!= b)
{
cout << "a!= b" << endl;
a= !a;
}
Edzard Egberts schrieb:
Sieghard Schicktanz wrote:
#include <stdio.h
#include <stdbool.h
int main (int argc, char * argv [])
{
bool b, c;
int i, k;
b= !c;
Das ist undefiniertes Verhalten, da c nicht initialisiert ist. Eine
Hier war b "zufällig" anfangs 0
Das ist aber ein großer Zufall, nämlich 1:254. bool wird intern ja
meistens in ein Byte gepackt, nicht in ein Bit und der Operator '!' ist
bei bool meistens als bitweise Invertierung der gesamten Variablen
implementiert.
Welcher Compiler macht denn sowas? Das ist ja eine fehlerhafe
Umsetzung des Operators !
Bei dem Effekt bin ich mir sicher, bei meiner Erklärung nicht so. Kann
auch sein, dass der ! nur das Bit Null invertiert (halte ich sogar für
wahrscheinlicher als meine vorhergehende "komplett invertieren" Deutung,
weil das mit den Werten 0 / 1 besser hinkommt) und die Abfrage dann
wegen der anderen Bits durcheinander kommmt.
> Was würdest Du hier erwarten:
Ein Beispiel mit nicht initialisierten Bool-Werten.
bool a, b;
while (a!= b)
{
cout << "a!= b" << endl;
a= !a;
}