2024(e)ko urtarrilaren 26(a), ostirala

1. astea | hamartarretik bitarrera


Zenbaki osoen datu-mota batzuk hurrengo taulan biltzen dira tamainaren arabera, gogoratu Integer datu-motak 2 edo 4 byte har ditzakeela hardwarearen arabera:





Jarraian garatzen diren lehen hiru azpiataletan kopuru hamartar bat kode bitarrera bihurtzen da IntToBin funtzioari esker. Laugarren azpiatalekoa ezin da egin.




1 byte

ShortInt eta Byte datu-motek byte bakarra hartzen dute memorian eta ondorioz 28=256 aukera daude kopuruak adierazteko.

Hementxe ematen den IntToBin_BYTE_adibidea izeneko programan IntToBin funtzioa erabiltzen da, funtzio horrek kopuru oso bat hartzen du eta testu bat sortzen du. IntToBin funtzioa ez da ikasi behar baina programa exekutatu eta bere irteera aztertu eta ulertu behar da:
program IntToBin_byte_adibidea ;

uses
   strutils ;
 
const
   iDIGITUAK = 8 ;
   iZURIUNEAK = 4 ;   
var
   byZenbakiarenBalioa: byte ;
   sEmaitza: string ;
   
begin
   writeln ;
   writeln ;
   writeln('====BYTE datu-motarekin lan eginez=========================') ;
   writeln ; 
   
   writeln('              byte = ', sizeof(byte), ' byte = ', 8*sizeof(byte), ' bit') ;
   writeln('               2^8 = 256 aukera') ;
   writeln ;
   writeln('      Txikiena (0) = ', 0) ;
   writeln('Handiena (2^8 - 1) = ', 255) ;
   writeln ;
     
   write('Zenbaki osoaren balio hamartarra eman: ') ;
   readln(byZenbakiarenBalioa) ;
   
   sEmaitza := IntToBin(byZenbakiarenBalioa, iDIGITUAK, iZURIUNEAK) ;   
   
   writeln ; 
   writeln('Hamartarra = ', byZenbakiarenBalioa) ;
   writeln('   Bitarra = ', sEmaitza, '   [', byZenbakiarenBalioa, ']') ;
   writeln ;
   writeln('  Txikiena = ', IntToBin(0, iDIGITUAK, iZURIUNEAK), '   [0]') ;
   writeln('        +1 = ', IntToBin(1, iDIGITUAK, iZURIUNEAK), '   [1]') ;
   writeln('        +2 = ', IntToBin(2, iDIGITUAK, iZURIUNEAK), '   [2]') ;
   writeln('        +3 = ', IntToBin(3, iDIGITUAK, iZURIUNEAK), '   [3]') ;
   writeln('        +4 = ', IntToBin(4, iDIGITUAK, iZURIUNEAK), '   [4]') ;
   writeln('       ...      ...      ...') ;
   writeln('  Aurrekoa = ', IntToBin(254, iDIGITUAK, iZURIUNEAK), '   [254]') ;
   writeln('  Handiena = ', IntToBin(255, iDIGITUAK, iZURIUNEAK), '   [255]') ;
   
   writeln ;
   writeln('===========================================================') ;
   
   writeln ;
   writeln ;
   writeln('ENTER sakatu exekuzioa amaitzeko...') ;
   readln ;
end.

Goiko IntToBin_BYTE_adibidea programaren antzekoa IntToBin_SHORTINT_adibidea programa litzateke. Hau eskatzen da: ShortInt datu-motako aldagaia erabiliz, hurrengo irudiaren araberako programa idatzi:
program IntToBin_SHORTINT_adibidea ;

uses
   strutils ;
 
const
   iDIGITUAK = 8 ;
   iZURIUNEAK = 4 ;   
var
   shZenbakiarenBalioa: shortint ;
   sEmaitza: string ;
   
begin
   ...



2 byte

SmallInt eta Word datu-motek bi byte hartzen ditzute memorian eta ondorioz 216=65536 aukera daude kopuruak adierazteko. 

Aukera horietatik erdiak kopuru negatiboentzat erabiltzen ditu SmallInt datu motak eta beste erdiak zeroa eta kopuru positiboentzat. Ondorioz, SmallInt datu motaren mugak -32768 eta 32767 dira. Word datu-motaren kasuan, zeinurik ez delako adierazi behar kopuruen mugak 0 eta 65535 dira.

SmallInt eta Word datu-motetako aldagaiak erabili bi programa hauek idatzi dira:
Bi programa horiek exekutatu eta ulertu.



4 byte

LongInt eta LongWord datu-motek lau byte hartzen ditzute memorian eta ondorioz 232=4294967296 aukera daude kopuruak adierazteko. 

Aukera horietatik erdiak kopuru negatiboentzat erabiltzen ditu LongInt datu motak eta beste erdiak zeroa eta kopuru positiboentzat. Ondorioz, LongInt datu motaren mugak -2147483648 eta 2147483647 dira. LongWord datu-motaren kasuan, zeinurik ez delako adierazi behar kopuruen mugak 0 eta 4294967295 dira.

SmallInt eta Word datu-motetako aldagaiak erabili bi programa hauek idatzi dira:
Bi programa horiek exekutatu eta ulertu.



8 byte

Int64 eta QWord datu-motek zortzi byte hartzen ditzute memorian eta ondorioz 264=1.8446744e+19 aukera daude kopuruak adierazteko, eta konstante horretatik abiatuta Int64 eta QWord datu-moten mugak kalkula daitezke. Baina datu-mota zabal hauei IntToBin funtzioa ezin zaie aplikatu.

 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.