2024(e)ko abenduaren 18(a), asteazkena

Datu-moten bihurketa automatikoa

C lengoaiak adierazpen berean datu-mota ezberdineko gaiak agertzea ahalbidetzen du, konpiladorea arduratzen da eragiketak behar bezala egiteaz. Adierazpen berean bi datu-mota edo gehiago agertzen direnean, eragigai guztien datu-motak bihurtzen ditu C lengoaiaren konpiladoreak eragigaietan dagoen datu-motarik handienera, honako bi arau hauen arabera:

  1. char eta short int guztiak int bihurtzen dira, float guztiak double bihurtzen dira
  2. Eragigai pare guztietarako, honako hau sekuentzian gertatzen da:
    • Eragigaietako bat long double bada, bestea long double bihurtzen da
    • Eragigaietako bat double bada, bestea double bihurtzen da
    • Eragigaietako bat long bada, bestea long bihurtzen da
    • Eragigaietako bat unsigned bada, bestea unsigned bihurtzen da.

Konpiladoreak bihurketa-arau horiek aplikatu ondoren, eragigaiak datu-mota berekoak izango dira, eta emaitza eragigaien datu-motako horretakoa izango da. Adibide bat ikus dezagun:

    char cKarak;
    int iKop;
    float fZbk;
    double dZbk;

    ( cKarak  /  iKop )  -  ( fZbk  +  iKop )  +  ( fZbk  *  dZbk ) ;
       char      int          float    int          float   double

Adierazpen aritmetikoan datu-mota desberdinak daudelako, lehenengo araua aplikatuko da. Lehenengo arauaren arabera, char datu-motako cKarak aldagaiaren balioa int bihurtzen da, eta, era berean, float datu-motako fZbk aldagaiaren balioa double bihurtzen da. Egoera berria hau delarik:

    ( cKarak  /  iKop )  -  ( fZbk  +  iKop )  +  ( fZbk  *  dZbk ) ;
       int       int         double    int         double   double

Hiru blokeak ikus ditzagun banan-banan. Lehen blokeko bi eragigaiak mota berekoak direnez, lehenengo eragiketa egingo dugu (cKarak/iKop), eta emaitza int datu-motakoa izango da. Era berean, hirugarren blokeko eragiketan bi biderkagaiak datu-mota berekoak direnez fZbk*dZbk eragiketa burutuko da emaitza double datu-motakoa delarik. Baina, bigarren blokeko batugaiak datu-mota desberdinekoak dira, horregatik, bigarren araua aplikatuz int datu-motakoa double datu-motara bihurtzen da eta fZbk+iKop emaitza double izango da.

    ( cKarak  /  iKop )  -  ( fZbk  +  iKop )  +  ( fZbk  *  dZbk ) ;
       int       int         double    int         double   double
       -------------         -------------         ---------------
            int                  double               double        

Hiru blokeak ebaluatu ondoren, haien integrazioa egin beharko da. Lehen blokea int datu-motakoa izango denez, eta bigarren blokea double datu-motakoa denez, lehen blokeari bihurketa bat egiten zaio double izan dadin eta bi bloken arteko kendura double datu-motakoa izango da. Amaitzeko hirugarren blokea gehituko zaio aurreko emaitzari eta biak double datu-motakoak direnez azken emaitza ere double izango da.

    ( cKarak  /  iKop )  -  ( fZbk  +  iKop )  +  ( fZbk  *  dZbk ) ;
       int       int         double    int         double   double
       -------------         -------------         ---------------
            int                  double                 double
            ---------------------------
                     double                             double
                     -----------------------------------------
                                        double
 

iruzkinik ez:

Argitaratu iruzkina