|
|
|
![]() |
|
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 14: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 14: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: 19:25.