Basis van programmeren in C

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

Wat is de uitvoer als de bovenstaande code, die 9 opslaat in een bitveld van 3 bits, wordt uitgevoerd?

  1. A1
  2. B7
  3. C9
Antwoord en toelichting tonen

Antwoord: A. 1

x is een bitveld zonder teken van 3 bits, dus het kan alleen 0 tot 7 weergeven. Een waarde opslaan die niet in een type zonder teken past, geeft de rest bij deling door 2³ = 8, dus 9 wordt 1. Bitvelden kunnen worden gebruikt om kleine waarden compact op te slaan, zoals instelvelden van registers of communicatievlaggen, maar details zoals de bitvolgorde van de velden verschillen per implementatie. gcc geeft een waarschuwing als de constante 9 rechtstreeks aan s.x wordt toegekend.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. Wat is de uitvoer als de bovenstaande code, die de met #define gedefinieerde macro SQUARE gebruikt, wordt uitgevoerd?
  2. Het headerbestand sensor.h is geschreven zoals hierboven. Wat is het doel van de drie regels #ifndef, #define en #endif?
  3. Wat is de uitvoer als de bovenstaande code binnen de functie main wordt geschreven en uitgevoerd?
  4. Een uitgangsregister van een microcontroller wordt gedeclareerd en gebruikt zoals hierboven. Welke beschrijving van deze declaratie is juist?
  5. Welke beschrijving van ongedefinieerd gedrag in de zin van de C-standaard is juist?