PDA

Visualizza la versione completa : [C] definizione di nuovi tipi di dato


Hysoka
27-07-2008, 01:07
ciao a tutti
vorrei 'creare' dei tipi di dato che, nella pratica, sono degli interi un po' particolari: vorrei ottenere degli interi a 16bit, 32bit e 64bit FISSI con e senza segno.

so che con short int, int e long int otterrei benissimo questo risultato, ma se il programma venisse compilato in una macchina diversa, non sono certo che questi valori siano ottenuti con la stessa precisione.
Magari in una macchina a 32bit potrei ottener 16, 32 e 32 e cose di questo tipo.

Esistono degli header (possibilmente compatibili sia con lin che con win) che mi permettano di ottenere ci senza dovermi preoccupare per quale macchina il programma viene compilato? Oppure, esistono dei trucchetti che mi permettano di ottenere questo risultato?

vi ringrazio anticipatamente...

FreeManX
28-07-2008, 10:36
Perche' hai questa necessita'?

XWolverineX
28-07-2008, 11:54
Dovresti creare delle strutture in cui inserirai i dati necessari a seconda della piattaforma. Usa le direttive preprocessore.

gp.maraldo
29-07-2008, 19:51
Potresti usare una cosa di questo tipo:

struct intero16bit{
int x:16;
}

anche se il sistema prevede, ad esempio, 4 byte per un intero,
ne verranno utilizzati solo 2 (=16 bit). (anche se viene utilizzata
comunque una memoria di 4 byte)

Non s se f al caso tuo!

gp.maraldo
29-07-2008, 19:53
Ovviamente la struttura v terminata con un ;
che ho dimenticato :zizi:

Se vuoi altre informazioni, puoi cercare su internet
bit field

Buon lavoro

MItaly
30-07-2008, 13:33
Diversi compilatori supportano una sintassi specifica per interi di dimensione fissa (ad esempio Microsoft Visual C++ e GCC supportano i tipi __int8, __int16, __int32 e __int64). Puoi usare questi tipi se conti di lavorare solo con compilatori che supportano questa sintassi.

Hysoka
01-08-2008, 00:29
ehehe
vorrei ringraziare tutti per le risposte e rispondervi:
@FreeManX:
inizialmente volevo dirti "ma che te frega?", cmq sto lavorando a tempo perso ad un progettino nella quale risparmiare il bit fa la differenza.
@XWolverineX: sto appunto facendo questo, grazie
@gp.maraldo: testato, ma ho avuto dei problemi di casting, ovvero non sono riuscito a mettere un int32 in un int16, ma cmq un numero piccolo (tipo 10, o 30).
@MItaly:
sto usando gcc e quindi mi dai da pensare un pochetto. Gli __int8 sono 8bit per qualsiasi architettura (la stessa cosa vale per __int16 e gli altri).

oregon
01-08-2008, 10:18
Originariamente inviato da Hysoka
ho avuto dei problemi di casting, ovvero non sono riuscito a mettere un int32 in un int16, ma cmq un numero piccolo (tipo 10, o 30).

Non capisco ... forse vuoi dire

int a=30;
short int b;

b=(short int)a;


??

gp.maraldo
01-08-2008, 17:20
In effetti non ho caipto neanche io cosa intendi.
:confused:

Hysoka
03-08-2008, 11:37
@oregon:
ho confuso con un altra cosa :zizi:

Loading