|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
[c++] Union
Salve a tutti, stavo guardando le Union e mi sono imbattuto in questo codice.
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 Ultima modifica di sharkkk : 25-10-2013 alle 15:04. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Quote:
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 Ultima modifica di lorenzo001 : 25-10-2013 alle 15:25. |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
quindi con %08x nella printf viene stampato a video il valore esadecimale corrispondente?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Sì, come puoi leggere in qualsiasi libro di base del linguaggio ...
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:28.




















