Grundlagen der Programmiersprache C

struct { unsigned int x : 3; } s;
int v = 9;
s.x = v;
printf("%d\n", s.x);

Welche Ausgabe erzeugt der obige Code, der 9 in ein 3-Bit-Bitfeld schreibt, bei der Ausführung?

  1. A1
  2. B7
  3. C9
Antwort und Erläuterung anzeigen

Antwort: A. 1

x ist ein vorzeichenloses Bitfeld mit 3 Bit und kann nur 0 bis 7 darstellen. Ein Wert, der nicht in einen vorzeichenlosen Typ passt, wird zum Rest der Division durch 2³ = 8; aus 9 wird daher 1. Ein Bitfeld eignet sich, um kleine Werte wie Einstellfelder von Registern oder Kommunikations-Flags dicht gepackt zu halten, doch die Anordnung der Bits und Ähnliches hängt von der Implementierung ab. gcc warnt, wenn die Konstante 9 direkt s.x zugewiesen wird.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Welche Ausgabe erzeugt der obige Code, der das mit #define definierte Makro SQUARE verwendet, bei der Ausführung?
  2. Die Header-Datei sensor.h wurde wie oben geschrieben. Welchen Zweck haben die drei Zeilen #ifndef, #define und #endif?
  3. Der obige Code steht in der Funktion main. Welche Ausgabe erzeugt er bei der Ausführung?
  4. Bei einem Mikrocontroller wird das Ausgaberegister wie oben deklariert und verwendet. Welche Aussage über diese Deklaration ist richtig?
  5. Welche Aussage beschreibt das undefinierte Verhalten im Sinne des C-Standards richtig?