Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813

    [C] definizione di nuovi tipi di dato

    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...
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  2. #2
    Perche' hai questa necessita'?

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Dovresti creare delle strutture in cui inserirai i dati necessari a seconda della piattaforma. Usa le direttive preprocessore.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    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!

  5. #5
    Ovviamente la struttura và terminata con un ;
    che ho dimenticato

    Se vuoi altre informazioni, puoi cercare su internet
    bit field

    Buon lavoro

  6. #6
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    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).
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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;


    ??
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    In effetti non ho caipto neanche io cosa intendi.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    @oregon:
    ho confuso con un altra cosa
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.