PDA

View Full Version : [c++] Union


sharkkk
25-10-2013, 13:51
Salve a tutti, stavo guardando le Union e mi sono imbattuto in questo codice.


#include <stdio.h>
#include <stdlib.h>

union boh {
struct test {
unsigned int a:2;
unsigned int b:2;
unsigned int c:2;
} t;
unsigned int bf;
} b;

int main (int argc, char *argv[])
{
b.t.a=atoi(argv[1]);
b.t.b=atoi(argv[2]);
b.t.c=atoi(argv[3]);
printf("%08x\n",b.bf);
}


-non avevo mai visto una dichiarazione del genere ( int c:2; ), cosa significa?
-cosa farebbe questo programma? perche non ho capito cosa stamperebbe %08x
-ma concretamente le union sono utili, vengono usate?

p.s. un ultima domanda stupida, se argv[] crea un vettore di char con dei valori passati in input, argc cosa conterrebbe?

grazie in anticipo

lorenzo001
25-10-2013, 14:20
Salve a tutti, stavo guardando le Union e mi sono imbattuto in questo codice.

[CODE]
-non avevo mai visto una dichiarazione del genere ( int c:2; ), cosa significa?
-cosa farebbe questo programma? perche non ho capito cosa stamperebbe %08x
-ma concretamente le union sono utili, vengono usate?

p.s. un ultima domanda stupida, se argv[] crea un vettore di char con dei valori passati in input, argc cosa conterrebbe?

grazie in anticipo


c:2 indica che sono utilizzati solo 2 bit dell'int

con un input di 1 2 3 avrai che saranno utilizzati solo due bit per dato quindi

01
10
11

e questi saranno inseriti in un solo int

111001

il risultato in hex sarà

39

sì le union sono utili e vengono usate quando è utile rappresentare lo stesso dato in modi diversi.
Una volta erano utili quando le risorse non erano molte e si doveva risparmiare il "bit".
A volte lo sono ancora nei sistemi a microcontrollore in cui effettivamente le risorse non sono molte.


argc contiene il numero di elementi di argv

sharkkk
25-10-2013, 14:54
quindi con %08x nella printf viene stampato a video il valore esadecimale corrispondente?

lorenzo001
25-10-2013, 15:01
Sì, come puoi leggere in qualsiasi libro di base del linguaggio ...

sharkkk
25-10-2013, 15:51
Sì, come puoi leggere in qualsiasi libro di base del linguaggio ...

grazie mille lorenzo per la disponibilita