Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di D4MI4NO
    Registrato dal
    Sep 2001
    Messaggi
    275

    [C] problema con i sizeof dell'int

    Ciao ragazzi, eseguendo un programmino come questo

    #include <stdio.h>

    int main()
    {
    printf("\n\tUn char è %d byte", sizeof(char));
    printf("\n\tUn int è %d byte", sizeof(int));
    printf("\n\tUn short è %d byte", sizeof(short));
    printf("\n\tUn long è %d byte", sizeof(long));
    printf("\n\tUn unsigned char è %d byte", sizeof(unsigned char));
    printf("\n\tUn unsigned int è %d byte", sizeof(unsigned int));
    printf("\n\tUn unsigned short è %d byte", sizeof(unsigned short));
    printf("\n\tUn unsigned long è %d byte", sizeof(unsigned long));
    printf("\n\tUn float è %d byte", sizeof(float));
    printf("\n\tUn double è %d byte", sizeof(double));
    printf("\n\n");

    return 0;
    }

    ho notato una cosa strana.
    La dimensione dell'int dev'essere minore o uguale a quella di un long per lo standard.

    Come mai a me non è così?

    blackangel@damiano:~$ ./sizeof

    Un char è 1 byte
    Un int è 4 byte
    Un short è 2 byte
    Un long è 2 byte
    Un unsigned char è 1 byte
    Un unsigned int è 4 byte
    Un unsigned short è 2 byte
    Un unsigned long è 4 byte
    Un float è 4 byte
    Un double è 8 byte

    blackangel@damiano:~$

    (spero di non aver scritto una cavolata)

    ciao ciao
    ...anche se la strada è dura...se stiamo assieme...arriveremo su quella cosa chiamata luna...

  2. #2
    n355un0
    Guest
    con dev c++:

    Un char è 1 byte
    Un int è 4 byte
    Un short è 2 byte
    Un long è 4 byte
    Un unsigned char è 1 byte
    Un unsigned int è 4 byte
    Un unsigned short è 2 byte
    Un unsigned long è 4 byte
    Un float è 4 byte
    Un double è 8 byte


    dipende dal compilatore. il visual studio si comporta come il dev.

  3. #3
    per quanto ne so:
    l'intero è SEMPRE una word del sistema. Quindi non è il compilatore.
    Perchè come il byte è un u char, l'inter è il riferimnto per la word.
    Un syst a 32 bit avrà una word di 4 byte.
    Quindi, è spiegato l'int.
    Per quanto riguarda il long... non saprei esattamente.
    Cmq non credo che lo standard si basi su di un int per costruire un long... oppure si basa su un int e sul modello di memoria utilizzato. Magary tiny, come modello, specifica un long di 2 byte.
    Prova a cambiare il modello di memoria e guarda.
    Facci sapere
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  4. #4
    ah, non mettere MAI log e short soli.
    metti sempre long int e short int.
    Molto spesso il compilatore fa casino x quello...
    a volte prende il modello sbagliato (non chiedermi perch?, dato che la base dovrebbe essere un int...)
    prora anche con quello.
    O al massimo, se proprio vuoi usare short e long per risparmiare tempo, rideiniscili come

    typedef long int ilong;
    typedef short int ishort;

    cos?, magari ? meglio
    Ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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.