Pagina 1 di 16

Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 14:58
da daniele1996
Salve a tutti, avrei la necessità di fare una tabella della verità a 3 bit (8 combinazioni) però vorrei usare meno ram possibile... e dividere bit per bit come potrei farlo?

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 15:05
da TardoFreak
:-M

Non ho capito cosa devi fare.

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 15:09
da daniele1996
Oddio scusami sono stato troppo vago
hai presente la tabella della verità:

0 0 0
0 0 1
0 1 0
1 0 0
1 0 1
1 1 0
1 1 1

ecco devo rappresentare questa cosa nella Ram

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 15:23
da DirtyDeeds
Ma perché avete tutti questa abitudine di scrivere C/C++ come se fossero lo stesso linguaggio o come se l'uso dell'uno o dell'altro portasse alla stessa soluzione?

C e C++ sono due linguaggi differenti. In quale linguaggio devi programmare tu?

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 15:27
da daniele1996
C++ però ho scritto anche C perché non so che compilatore usa Dev c++ ....

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 15:36
da DirtyDeeds
daniele1996 ha scritto:usa Dev c++ ....


Dev C++ è un IDE che usa Mingw come compilatore, il compilatore gcc portato sotto Windows. Il fatto che compili per C o C++ dipende da cosa gli dici tu di fare, non è che prenda lui l'iniziativa.

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 15:40
da daniele1996
in C++ come si potrebbe fare?

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 15:54
da DirtyDeeds
Non lo so, io conosco il C, non il C++.

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 16:31
da Shockwaver
?%
Codice: Seleziona tutto
#pragma pack(push, 1)
typedef struct
{
    unsigned char b0 : 1;
    unsigned char b1 : 1;
    unsigned char b2 : 1;
} yourMatrix_t;
#pragma pack(pop)

Sia per C che per C++
1 byte, meno non puoi. I singoli bit rappresntano gli ingressi della tua tabella.
Si avvicina a ciò che ti serve?

Re: Matrice [C / C++]

MessaggioInviato: 19 apr 2014, 17:06
da Shockwaver
Se poi hai bisogno di una tabella completamente strutturata e popolata puoi fare così (sparo perché nn so che devi fare)

Codice: Seleziona tutto
#pragma pack(push, 1)
typedef union
{
    unsigned char Val : 3;
    struct
    {
        unsigned char b0 : 1;
        unsigned char b1 : 1;
        unsigned char b2 : 1;
    } bits;
} TableEntry_t;

typedef union
{
    unsigned int Val : 24;
    struct
    {
        unsigned char     FFF : 3;
        unsigned char     FFT : 3;
        unsigned char     FTF : 3;
        unsigned char     FTT : 3;
        unsigned char     TFF : 3;
        unsigned char     TFT : 3;
        unsigned char     TTF : 3;
        unsigned char     TTT : 3;
    } Entries;
} TruthTable_t;
#pragma pack(pop)

int main(int argc, char **argv, char **envp)
{
    TruthTable_t TruthTable = {.Val = 0xFAC688}; /* Calcolato al volo, meglio controllare */
    TableEntry_t Entry;

    Entry.Val = TruthTable.TTF;
   [...]
   return EXIT_SUCCESS;
}

3 byte di allocazione, 4 di utilizzo per via dell'allineameno della RAM.