ContainerDriver
08-01-2008, 17:29
Hallo,
ich habe folgenden Testcode:
#include <stdio.h>
//0....0 1000 0000 (int)
//1000 0000 (char)
//-> int
//0....0 1000 0000 (int)
int main(void)
{
int a=0x80;
char b=0x80;
printf("====%d\n",a);
printf("----%d\n",(int)b);
if ((a & b) != 0) //*
{
printf("&\n");
}
if ((a ^ b) != 0) //*
{
printf("^\n");
}
return 0;
}
.
Als Ausgabe erhalte ich:
====128
-----128
&
^.
Diese ist für mich unverständlich.
Ich nehme an, dass bei den mit Stern markierten Stellen eine Umwandlung von char nach int (für b) durchgeführt wird. Die printf-Anweisung weiter oben bestätigt, dass nach der Umwandlung beide Variablen den Wert 0x80/128 haben.
Warum erfolgt dann aber die Ausgabe des "^", bzw. warum liefert das XOR einen Wert ungleich 0? Die Bitmuster müssten doch gleich sein (was die Ausgabe des "&" demonstriert)?
Verwende ich bei den Bitoperatoren manuelle Casts (((char)a & b) != 0 und ((char)a ^ b) != 0), erfolgt die erwartete Ausgabe.
Gruß, Florian
EDIT: Holla, durch die Formatierung im Forum habe ich erst gesehen, dass die Ausgabe beim printf ja "-128" heißt. Dann hatte der Professor doch unrecht.
ich habe folgenden Testcode:
#include <stdio.h>
//0....0 1000 0000 (int)
//1000 0000 (char)
//-> int
//0....0 1000 0000 (int)
int main(void)
{
int a=0x80;
char b=0x80;
printf("====%d\n",a);
printf("----%d\n",(int)b);
if ((a & b) != 0) //*
{
printf("&\n");
}
if ((a ^ b) != 0) //*
{
printf("^\n");
}
return 0;
}
.
Als Ausgabe erhalte ich:
====128
-----128
&
^.
Diese ist für mich unverständlich.
Ich nehme an, dass bei den mit Stern markierten Stellen eine Umwandlung von char nach int (für b) durchgeführt wird. Die printf-Anweisung weiter oben bestätigt, dass nach der Umwandlung beide Variablen den Wert 0x80/128 haben.
Warum erfolgt dann aber die Ausgabe des "^", bzw. warum liefert das XOR einen Wert ungleich 0? Die Bitmuster müssten doch gleich sein (was die Ausgabe des "&" demonstriert)?
Verwende ich bei den Bitoperatoren manuelle Casts (((char)a & b) != 0 und ((char)a ^ b) != 0), erfolgt die erwartete Ausgabe.
Gruß, Florian
EDIT: Holla, durch die Formatierung im Forum habe ich erst gesehen, dass die Ausgabe beim printf ja "-128" heißt. Dann hatte der Professor doch unrecht.