2025(e)ko otsailaren 19(a), asteazkena

ASCII taula

ZER DAKIDAN:
Karaktereen char datu-mota ezagutzen dut eta karaktereak ASCII taularen arabera sailkatzen direla dakit. Aldagai batea balioak aldagaiaren datu-motako muga gainditzeari gainezkatze edo "overflow" esaten zaio



ZER IKASIKO DUDAN:
char datu-motako aldagai bat erabiliz, gainezkatze bat eragingo dut, gauza bera egingo dut unsigned char datu-motako aldagai bat erabiliz.

Karaktereak adierazteko karaktere bakoitzari zenbaki bat esleitzen zaio, eta horrela osatzen da American Standard Code for Information Interchange taula, ASCII taula. ASCII taula ordenaturik dago eta 256 elementuz osaturik dago (256 karaktere: byte batek ematen dituen 28=256 kodeak).

ASCII taularen lehen erdiari ASCII taula estandarra esaten zaio, taula estandarrak 128 karaktere biltzen ditu (0 kodean hasita eta 127 kodean bukatuta). ASCII taula estandarrak letra eta sinbolo arruntenak biltzen ditu eta 7 bit behar dira denak adierazi ahal izateko (27=128).

ASCII taularen bigarren erdiari ASCII taula luzatua (edo hedatua) esaten zaio, taula hedatuak ere 128 karaktere biltzen ditu (128 kodean hasita eta 255 kodean bukatuta). ASCII taula hedatuak karaktere bereziak eta karaktere grafikoak biltzen ditu.

ASCII taula hedatuan hiru azpizati bereizten diren:

  1. Kontrol-karaktereak: 0 posiziotik 31ra dauden karaktereak gehi 127 posizioko karakterea
  2. Karaktere inprimagarriak: 32tik 126 dauden karaktereak
  3. Karaktere bereziak: 128 posiziotik 255 posiziora dauden karaktereak

Hona hemen ASCII taula hedatua, gehiago jakiteko artikulu hau irakurri:

ASCII taula handiago ikusteko irudiaren gainean klik egin

Jarraian erakusten den ASCII taula estandar honetan karaktereen bit segidak ikus daitezke eta horiekin batera karaktere bakoitzaren posizioa sistema hamartarrean eta hexadezimalean (hamaseitarrean):

ASCII taula handiago ikusteko bere gainean klik egin




ASCII-Taula_1 delako programa honek ASCII taula hedatua erakusten du karaktereak hogeika pantailaratuz. Datu-moten informazio hau gogora ekarriz, jakina da char datu-motak 1 byte hartzen duela memorian eta bere heina -128tik +127ra doala (edo +0tik +255era doala unsigned char bezala deklaratuko balitz).

ASCII-Taula_1 programaren aldagaiak hiru dira, eta bakoitzaren zeregina jarraian azaltzen da:

  • cKarak, ASCII taula hedatuaren karaktereak eta haien kodeak erakusteko, bere datu mota char denez dagokion heina -128tik +127ra doa (gogoratu signed char ≡ char)
  • iKont, kontagailu bat begizta infinitoaren iterazioak zenbatzeko eta karaktereak hogeiko taldetan pantailaratzeko
  • cIrteteko, begizta infinitoa eteteko

ASCII-Taula_1 programa exekutatzean ondoko hau ikus daiteke; non gainezkatzea (edo "overflow" efektua) honela ulertu behar den:
                                            Bi biten arteko batuketa
                                            ========================
   127 kodeko karakterea    0111 1111      Unitateak: 1+1=0 (eta 1 bururako, hamarrekoetan)
   1 bit gehituz            0000 0001      Hamarrekoak: 1+0+1[bururakoa]=0 (eta 1 bururako)
                         ---------------   Ehunekoak: 1+0+1[bururakoa]=0 (eta 1 bururako)
  -128 kodeko karakterea    1000 0000   (Ç karakterea)
127 kodea duen karaktereari +1 egitean gainezkatzea gertatzen da eta 'Ç' ematen du
                                            Bi biten arteko batuketa
                                            ========================
  -1 kodeko karakterea      1111 1111      Unitateak: 1+1=0 (eta 1 bururako, hamarrekoetan)
   1 bit gehituz            0000 0001      Hamarrekoak: 1+0+1[bururakoa]=0 (eta 1 bururako)
                         ---------------   Ehunekoak: 1+0+1[bururakoa]=0 (eta 1 bururako)
   0 kodeko karakterea      0000 0000   (0 posizioko karakterea)
-1 kodea duen karaktereari +1 egitean gainezkatzea gertatzen da eta '\x00' karakterea ematen du

Hauxe da ASCII-Taula-1 programaren kodea:

/* ASCII-Taula_1: signed char [-128..+127] (edo char ) */

// Ikusi ere 'ASCII-Taula_2' projektua non ucKarak aldagaia
// honela definitu den:  unsigned char [+0..+255]

#include <stdio.h>

int main()
{
    char cKarak;
    int iKont = 1;
    char cIrteteko;

    printf("\n");
    printf("            Kodea     Karakterea       Kontagailua\n");
    printf("            =====     ==========       ===========\n");
    for (cKarak = -128; cKarak <= 127; cKarak++)
    {
        printf("%15d           %c              iKont=%d\n", (int)cKarak, cKarak, iKont-1);
        if (iKont % 20 == 0)
        {
            printf("\nINTRO sakatu aurrera egiteko");
            printf("\nAmaitzeko ZURIUNEA+INTRO...  ");
            cIrteteko = getchar();
            printf("\n");
            if (cIrteteko == ' ')
                return 0;
            else
            {
                printf("            Kodea     Karakterea       Kontagailua\n");
                printf("            =====     ==========       ===========\n");
            }
        }
        iKont++;
    }
}

ASCII-Taula_2 delako programa ASCII-Taula_1 bezalakoa da, duen alde bakarra ucKarak aldagaian datza, zein unsigned char bezala deklaratu den (bere heina +0tik +255era doa).

Aurrekoaren bezala ASCII-Taula_2 programaren aldagaiak hiru dira, eta bakoitzaren zeregina ezaguna da:

  • ucKarak, ASCII taula hedatuaren karaktereak eta haien kodeak erakusteko, bere datu mota unsigned char denez dagokion heina +0tik +225era doa
  • iKont, kontagailu bat begizta infinitoaren iterazioak zenbatzeko eta karaktereak hogeiko taldetan pantailaratzeko
  • cIrteteko, begizta infinitoa eteteko

ASCII-Taula_2 programa exekutatzean ondoko gainezkatzea gertatzen da:

                                            Bi biten arteko batuketa
                                            ========================
   255 kodeko karakterea    1111 1111      Unitateak: 1+1=0 (eta 1 bururako, hamarrekoetan)
   1 bit gehituz            0000 0001      Hamarrekoak: 1+0+1[bururakoa]=0 (eta 1 bururako)
                         ---------------   Ehunekoak: 1+0+1[bururakoa]=0 (eta 1 bururako)
   0 kodeko karakterea      0000 0000   (0 posizioko karakterea)

Hauxe da ASCII-Taula-2 programaren kodea:

/* ASCII-Taula_2: unsigned char [+0..+255] */

// Ikusi ere 'ASCII-Taula_1' projektua non cKarak aldagaia
// honela definitu den:  char edo signed char [-128..+127]

#include <stdio.h>

int main()
{
    unsigned char ucKarak;
    int iKont = 1;
    char cIrteteko;

    printf("\n");
    printf("            Kodea     Karakterea       Kontagailua\n");
    printf("            =====     ==========       ===========\n");
    for (ucKarak = 0; ucKarak <= 255; ucKarak++)
    {
        printf("%15d           %c              iKont=%d\n", (int)ucKarak, ucKarak, iKont-1);
        if (iKont % 20 == 0)
        {
            printf("\nINTRO sakatu aurrera egiteko");
            printf("\nAmaitzeko ZURIUNEA+INTRO...  ");
            cIrteteko = getchar();
            printf("\n");
            if (cIrteteko == ' ')
                return 0;
            else
            {
                printf("            Kodea     Karakterea       Kontagailua\n");
                printf("            =====     ==========       ===========\n");
            }
        }
        iKont++;
    }
}


Aspaldiko Datu-moten taula artikulua gogora ekarriz, char datu-mota eta unsigned char datu-mota alderatzen dira ASCII-Taula_3 programa honetan:


/* ASCII-Taula_3: char eta unsigned char */

#include <stdio.h>
#include <limits.h>

int main()
{
    char cLetra;
    int iKontagailu1;
    unsigned char ucLetra;
    int iKontagailu2;

    printf("-------------------------------------------------------------");
    printf("\n     'limits.h' fitxategian definitutako konstante osoak:");
    printf("\n              - CHAR_MIN  = %d", CHAR_MIN);
    printf("\n              - CHAR_MAX  =  %d", CHAR_MAX);
    printf("\n              - UCHAR_MIN =  (definitu gabe, 0 litzateke)");
    printf("\n              - UCHAR_MAX =  %d", UCHAR_MAX);

    printf("\n             sizeof(char) = %d byte [-128..127]", (int)sizeof(char));
    printf("\n    sizeof(unsigned char) = %d byte    [0..255]", (int)sizeof(unsigned char));
    printf("\n-------------------------------------------------------------");
    printf("\n\n");

    printf("  Kodea Karakterea        Kodea Karakterea\n");
    printf("  ===== ==========        ===== ==========\n");

    ucLetra = -128;
    cLetra = 0;
    iKontagailu2 = 0;
    for (iKontagailu1 = -128; iKontagailu1 <= 127; iKontagailu1++)
    {
        printf("%7d -----> |%c|\t", iKontagailu1, ucLetra);
        printf("%7d -----> |%c|\n", iKontagailu2, cLetra);
        ucLetra++;
        cLetra++;
        iKontagailu2++;
    }

    printf("  ===== ==========        ===== ==========\n");
    printf("  Kodea Karakterea        Kodea Karakterea\n\n");

    getchar();
    return 0;
}






  • ASCII-Taula_1.cbp | main.c  
  • ASCII-Taula_2.cbp | main.c   
  • ASCII-Taula_3.cbp | main.c  


 

iruzkinik ez:

Argitaratu iruzkina