Variables 101: Coneixent el teu ordinador

Tristament he vist que no molts volen aprendre a programar aquest 2018 🙁 però encara que només hagués llegit el meu article anterior una persona i després una mica de temps aquesta sigui capaç d'enviar un commit a algun projecte de programari lliure, jo em donaria per satisfet amb la meva tasca 🙂

Per als amants de la seguretat, els prometo que el següent serà un post sobre seguretat 🙂 així tots contents, si algú desitja aprendre una altra cosa (com git, administració de servidors, o jo que sé: p), o que comenti algun altre tema que no pugui respondre de manera senzilla en el quadre de comentaris, feu-m'ho i veiem com podem treballar-😉

Bé, ara si anem a la nostra, anteriorment parlem sobre tipat, i que aquest tenia a veure amb la forma en què guardem les nostres variables en un programa, ara anem a revisar una mica de què passa a l'interior i esperem que pugui ser prou clar.

Bits

Crec que aquest és un tema que sempre toco quan escric sobre programació, certament és una cosa que em fascina i que m'ha ajudat a comprendre moltes coses, ara intentaré explicar una mica com són, com es llegeixen, i per a què serveixen 🙂

Pensin en un interuptor de llum, quan el circuit està tancat, tenim un 0 a la pantalla, quan vam canviar de posició l'interruptor, doncs un 1🙂 ¿senzill no és cert?

Ara, un 0 i un 1 poden significar moltes coses, tot depèn de la creativitat amb què ho prenguis, suposem que jo vull saber si algú va a anar a el Nord o al Sud, 1 pot significar nord i 0, Sud 🙂 diguem que jo vull saber si algú és home o dona, 1 pot ser home i 0, Dona 🙂. Ara vull saber si aquesta persona és jove o major (> 22), 0 pot significar jove i 1, Major. Seguim imaginant ... Té alguna mascota? 1 diria que sí, mentre que 0 diria que no. Ara vull que llegeixin amb mi la següent línia:

1001

Això és la forma breu de dir ...

Una jóven mujer de no más de 22 años se dirige al norte acompañada de su mascota.

el que és molt diferent a:

0110 o Un hombre con más de 22 años de edad se dirige solo hacia el sur.

Bytes

Ara anirem un pas endavant, anem a aprendre a llegir bytes. Un byte és la successió de 8 bits, els quals es llegeixen de dreta a esquerra i cada 1 representa una potència de 2 elevat a la n on n és la posició de l'bit. Com sona a xinès, posarem un petit exemple 🙂

01001011 Tenim aquest byte, ara anem a anar de dreta a esquerra (<-) jo vaig a posar-los de dalt a baix per poder escriure el seu signifiacdo:

1: El bit a l'estar en la posició 0 ens indica que tenim el següent 2 elevat a la zero o 2^0. Això bé sabem que equival a 1.

1: El segon bit, ara la posició 12^1 que és el mateix que dir 2

0: Tercer bit ... aquí hauria de ser 2^2, Mes com no està encès, anem a deixar-lo en 0

1: Quart bit, 2^3 u 8 🙂

0: El mateix que 0

0: un altre 0

1: Ara estem en 2^6 o 64

i finalment 0 , Que ja sabem el que significa 🙂 ara anem a sumar els nostres resultats i comparar-los amb la següent taula 🙂 Tenim un 75 per la qual cosa anem a buscar-lo en la columna Decimal i veurem el que apareix en char

Resultat d'imatge per ascii table

'Tenim una K!! Felicitats, ja saben llegir en binari 🙂 Però els més sagaços hauran pogut notar que també hem obtingut un nombre decimal, i que aquest té un límit (quan tots els valors són 1) Aquest límit es troba al número 255.

Paraula

Ara més d'un em dirà, però què passa si necessito un nombre major a 255? o On puc trobar altres caràcters com els japoneces? Doncs la resposta és simple, ajuntem 2 bytes. Ara que tenim dos, la quantitat possible de combinacions que tenim és 2^16 o 65536 possibles resultats, com el 0 és un d'aquests, el màxim possible és 65535. ¿A algú li sona aquest número? Recorden la quantitat màxima de ports en un sistema linux? Els hi deixo de tasca 😉

Double word & quad word

Per als més matemàtics també existeixen formats específics, els double word contenen, com molts ja hauran imaginat 2 word o 4 bytes (o 32 bits) D'informació, el mateix que dir:

11111111111111111111111111111111 a 0 a 4 294 967 295

A hores d'ara molts es preguntaran què passa amb els números negatius, és a dir, en algun lloc han d'estar contemplats ¿no és cert? Per poder emmagatzemar un nombre negatiu, els desenvolupadors de processadors van triar ocupar el primer bit de l'esquerra com un valor de signe. Això vol dir que si el primer bit és 0 parlem d'un nombre positiu, però si és 1 tenim un negatiu. Ara veuen per què els bits són tan especials, poden ser el que tu vulguis 😀

Però això evidentment ens deixa amb una posició menys per realitzar la multiplicació! Pel que el nostre0 a 4 294 967 295 es converteix en:

-2,147,483,648 a +2,147,483,647

Ara bé, molts ja tenim processadors de 64 bits, I aquest és el valor d'un paraula quàdruple, Podem tenir valors que van des del 0 a 18 446 744 073 709 551 615. Aquest sí que és un nombre gran 🙂

Per què 8 bits?

Això és una cosa que ja més d'un s'estarà preguntant, i la resposta està en el maquinari. Des del seu origen, els processadors necessitaven data per poder realitzar operacions. La data s'emmagatzema en la memòria de l'ordinador i cada vegada que el processador la requereix utilitza els busos de data per aconseguir-la. En l'antiguitat, aquests busos podien comunicar un màxim de 8 bits per cicle, això vol dir que el màxim i més eficient manera de moure data, era agrupant 8 bits i manant aquests a el processador.

Amb el pas el temps, fins al dia d'avui, els processadors han desenvolupat la hablidad de moure 16 bits, 32bits i ... 64 bits.

Què té a veure amb el tipatge?

Ja arribem a la part on tot cobra sentit 🙂 El tipatge és una propietat que utilitzen els llenguatges de programació per a denominar aquests espais de memòria. Totes les variables tenen la seva contrapart en algun d'aquests tipus de data, sense importar com siguin trucades. Aquests es coneixen com tipus de dada primitius, Cada llenguatge fortament tipat té la seva concepció d'aquests valors, i la quantitat que representen. Per exemple en C tenim la biblioteca limits.h que ens mostra la quantitat màxima i mínima dels valors primitius.

Vegem el que passa si intentem trencar un dels valors:

Disseny propi. Christopher Díaz Riveros

A la dreta tenim els valors de l'arxiu limits.h ia l'esquerra hem pres un d'aquests valors (unsigned short int) I li hem assignat un número major a l'corresponent. Com a resultat el compilador ens adverteix que estem utilitzant malament la memòria perquè la forma binària de 66666 no pot cabre en la forma binària de 65535. Això ens porta a una lliçó de performance quan programem, si el teu valor no creixerà molt al llarg de el temps, o si no requereixes valors tan grans com els d'un doble o paraula quàdruple, Utilitzar el tipus correcte redueix la quantitat de memòria sol·licitada pel CPU, el que implica una major velocitat d'obtenció de data si està ben calculada.

Al costat dels intèrprets això és més senzill a causa de les conversions implícites. Cuan definim una variable en llenguatges com Javascript o Python, l'intèrpret s'encarrega d'entendre quin tipus és, i assignar l'espai suficient de memòria per a realitzar les operacions. Vegem un exemple senzill 🙂

Disseny propi. Christopher Díaz Riveros

Com poden veure, no hem d'explicar a l'intèrpret de python el tipus de la nostra variable, perquè ell mateix s'encarrega d'assignar un tipus i emmagatzemar-lo en memòria 🙂

Coneix els teus variables

Això depèn de l'llenguatge i tipus d'implementació que vagis a utilitzar, però el primer pas per poder programar és aprendre les variables que pots utilitzar 🙂 Un cop comprenguis les variables, estaràs en situació de poder utilitzar-les de manera eficient i lògica per emmagatzemar informació (proveïda per un usuari o pel sistema). Aquest és el primer pas en l'escala de la programació i amb sort, després de llegir aquest article, hauràs comprès una mica millor com és que funciona el teu ordinador i com emmagatzema la informació. Amb mi serà fins al següent article, recordin deixar els seus comentaris per saber si cal reforçar o comentar algun punt en específic. Salutacions


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Luis va dir

    Bé escrit, succint i clar, alhora d'interessant per a tots els públics. Bon treball.

    1.    ChrisADR va dir

      Moltes gràcies, salutacions 🙂

  2.   Joan Jesús va dir

    Genial explicació. Ets un màquina.

    1.    ChrisADR va dir

      gràcies

  3.   Ruben va dir

    Molt ben explicat gràcies

    1.    ChrisADR va dir

      Gràcies a tu per llegir-lo complet 🙂

  4.   Diego va dir

    Excel·lent, gràcies per l'aportació. I aprofitant el tema binari consulto, hi ha possibilitat que ens donis una classe d'IP, subnet, etc. Entenc que no és un tema de programació, però sempre m'ha quedat pendent una bona explicació d'aquest tema.
    De nou, gràcies per la teva explicació

    1.    ChrisADR va dir

      Hola Diego, ja que es pot fer 🙂 francament jo tampoc he entrat molt en el tema, però no hi ha millor manera d'investigar que buscant alguna cosa a compartir a l'respecte a un article 🙂 Ho deixarem per a la llista perquè el següent post ja té tema i va tractar sobre hardening. Salutacions 🙂

  5.   Pedro va dir

    Sos un professor excel·lent, i molt generós per ensenyar el que saps. Felicitacions i gràcies.

    1.    ChrisADR va dir

      Moltes gràcies Pere 🙂 encara segueixo buscant llocs on ensenyar, lamentablement aquí a Perú és difícil quan només tens un títol de professional tècnic, per això ara estic veient la possibilitat de continuar els meus estudis universitaris aquí o on es pugui o fins i tot aplicar a alguna mestratge en l'estranger, qui sap, potser aviat es pugui donar alguna cosa així 🙂 però definitivament ensenyar és una cosa que m'alegra el dia 🙂 Salutacions

  6.   alguna cosa va dir

    no havia llegit millor explicació del tema, el primer exemple és brillant

    tot i que tampoc havia escoltat això de word (com a variables 16 bits), double word, o quad word

    sense importar que «ja programi», els post són interessants. Si ha de tenir alguna pega el post és utilitzar C (limits.h) com a exemple de les mides de variables, C té l'especificacion menys especifica que existeix

    1.    ChrisADR va dir

      Hola something 🙂 moltes gràcies, es va acudir en el camí l'exemple 😛 doncs certament són dades conegudes pels que han llegit una mica de Assembly, i això és el que el processador entén 🙂 jajaja certament C és poc específic, però crec que es deu a el fet que la portabilitat i les diferents arquitectures que suporta han estat tan variades que C ha de acomodar-se a cada tipus de processador per ser realment portable 🙂
      Salutacions i gràcies per compartir.

  7.   Sergio va dir

    Unnn seria interessant que aquesta sèrie de tutorials es basaran en rust, crec que és un dels llenguatges més interessants que s'estan desenvolupant avui dia.
    Jo camino darrere del, però reconec que és un llenguatge difícil, però amb molt de futur ...
    Espero les teves següents articles, són realment interessants.
    Salutacions.

    1.    ChrisADR va dir

      Hola Sergi, certament seria interessant, he sentit que el GNOME està planejant implementar Rust dins del seu conjunt de programes, encara no he vist a l'màxim l'abast que pretenen, però si que s'acosta una migració.
      Pel que fa a llenguatges, jo personalment encara estic aprenent C, vull poder començar a desenvolupar en el nucli en els propers mesos, i prefereixo aprendre a profunditat pocs llenguatges abans de començar a revisar nous, però definitivament puc buscar alguna cosa interessant i fer uns quants exemples a Rust, ja que la seva documentació es veu bastant bé per si mateixa.
      Salutacions i gràcies per compartir 🙂

  8.   David va dir

    Molt bones explicacions, tant les d'aquest article com les de l'anterior. Espero que segueixis amb aquesta temàtica que em resulta molt interessant.

    1.    ChrisADR va dir

      Hola David, jo també espero poder seguir escrivint i sobretot motivant persones a participar amb el programari lliure, hi ha tants projectes i necessitats ara de comptar amb unes quantes mans extra per desenvolupar seria fantàstic 🙂
      Salutacions

  9.   Mercat va dir

    Podries fer un post sobre la màquina de Turing?

    1.    ChrisADR va dir

      Hola Mart 🙂 crec que en algun comentari ho hem tocat abans ¿no és cert? segur que puc armar alguna cosa interessant sobre el tema 🙂 anem a veure el que pot sortir. Salutacions i gràcies per llegir tots els meus articles, des del primer dia fins avui sempre t'he vist bastant interessat 🙂

  10.   ALLAN LARA va dir

    Wow, moltes gràcies que bona explicació.

    Salutacions

    1.    ChrisADR va dir

      Moltes gràcies Allan 🙂 salutacions

  11.   Ramon Hidalgo va dir

    Jo vaig llegir el teu post anterior! Moltes gràcies per l'explicació, encara que crec que mai vaig a acabar d'entendre el «word».

    1.    ChrisADR va dir

      Hola Ramon 🙂 moltes gràcies per llegir tots dos. Si d'alguna cosa serveix, el «word» és l'evolució d'un byte, és com els processadors, abans havien de 8-bits, després de 16-bits, etc ... això és perquè cada vegada requerim més espai per processar i millor velocitat o potència ... el 'word' va néixer perquè l'espai de l' 'byte' es va quedar curt, i el mateix amb el 'double' i 'quad' word 🙂 és l'evolució natural que fa que agreguem potència i espai per poder seguir desenvolupant 🙂

      Salutacions

  12.   anònim va dir

    Aquest 2018 aprenc a programar si o si, gràcies

    1.    ChrisADR va dir

      M'alegra 🙂 esforça't molt !! Salutacions

  13.   Guillermo va dir

    Moltes gràcies, segueix així. Ja sé programar però espero teus ensenyaments, que la meva programació autodidacta està plena de males pràctiques.

    1.    ChrisADR va dir

      Gràcies Guillermo 🙂 Doncs tant de bo trobis coses interessants a les següents posts 🙂 Salutacions

  14.   Edgar va dir

    Una explicació senzilla sempre és la millor .. excel·lent ..
    Jo proposaria git ... per als programadors és bàsic quan vols treballar en equip i posar ordre al teu treball .. a les versions ..

    1.    ChrisADR va dir

      Molt cert Edgar, intentaré publicar contingut a l'respecte, encara que és bastant difícil dir alguna cosa nova perquè la documentació de git ja de per si és abundant i diverses coses ja estan traduïdes a diversos idiomes. Veuré que puc fer, salutacions i gràcies per compartir

  15.   Tiririri va dir

    Hola, el nombre de 0 a 18 446 744 073 709 551 615 correspon a la valor decimal de 64 bits o es refereix a un altre valor ?, doncs calculant la potència de 2 ^ 64, el resultat que obtinc és: 18 446 744.

    1.    ChrisADR va dir

      Hola Tiririri, crec que aquestes tenint un problema d'arrodoniment, pots intentar utilitzar l'ordre bc? és un llenguatge de programació dissenyat per tenir la major precisió possible, un cop dins el mateix tan sols cal fer 2^64, Potser això ho resolgui 🙂 m'avises què tal et va anar, salutacions

      PS. El valor real és 18 446 744 073 709 551 616, però estem restant 1 perquè el 0 compte com a valor possible 🙂

      1.    Tiririri va dir

        Gràcies, això ho vaig calcular amb una calculadora de potències que vaig trobar a la xarxa (https://es.calcuworld.com/calculadoras-matematicas/potencias/) I aquest va ser el resultat que em va donar.
        I sí, ja vaig provar amb la comanda bc, i efectivament em dóna el valor que tu vas anotar.

  16.   Tiririri va dir

    Hola una altra vegada, la imatge on refereixes la biblioteca limits.h és molt petita i no es pot llegir (al menys jo no vaig poder llegir-la, ja que veig que tot món sí ho va fer, segons sembla), i com no l'entenc ja no vaig continuar llegint. No se si poguessis canviar-la, espero no molestar amb això.

    1.    ChrisADR va dir

      Pots provar la versió de cel·lular, aquestes es veuen una mica més clares, és un tema de wordpress: / per altra banda, totes els headers de C poden trobar-se en / usr / include /, en aquest cas pots optar per llegir-la directament si et és més senzill 🙂 intentaré pujar una imatge més gran per veure si ajuda 🙂

      1.    Tiririri va dir

        Gràcies, crec que he de tenir paciència amb això, he he.

  17.   Katekyo va dir

    Gràcies per l'article ja q ara vaig comprendre una mica millor les variables i rang de representació d'un llenguatge i però ara crec q hauré començar a utilitzar la llibreria «stdint.h» ja que la recomanen per utilitzar quan es programa en c ja que a la meva m'havien ensenyat a la vella escola ja que la memòria era preuada i un havia de ser curós amb el que es feia servir

    1.    ChrisADR va dir

      No hi ha de què Katekyo, certament és millor fer servir la librearía estàndard, però et puc assegurar que és millor saber què distingeix un uint_least8_t d'un uint_fast8_t i això s'aconsegueix coneixent els tipus de dada primitius, la qual cosa era l'objectiu de l'post 🙂 Moltes gràcies pel comentari i per llegir l'article, salutacions

  18.   vencedor va dir

    : O una explicació magistral! sàvia part dels conceptes però sac molt coneixement nou d'aquest post

    1.    ChrisADR va dir

      Moltes gràcies Victor 🙂 què bo que pugui ser d'ajuda l'article, salutacions

  19.   Guille va dir

    Python em va agradar molt per facilitar la programació, vaig veure un curs en http://zetcode.com/gui/pyqt4/ de què em va encantar el tetris final: http://zetcode.com/gui/pyqt4/thetetrisgame/
    Aquest tetris ho retocar durant un estiu per posar-li punts, multijugador i música, a poc a poc, però molt entretingut.

    1.    ChrisADR va dir

      Hola Guille, certament és molt entretingut veure créixer a poc a poc el programari que estàs treballant 🙂 és una experiència incomparable, i més encara quan algú troba útil el que estàs desenvolupant, això és d'un altre món 😀 moltes gràcies per compartir 🙂

      1.    Guille va dir

        El que vaig fer l'he pujat (30Mb per la musiqueta) a http://guillermo.molleda.com/Tetris9.7z
        Té per configurar una velocitat inicial diferent a cada jugador o si reinicia punts després nova partida, ..., i són tres jugadors perquè juguessin les meves dues filles amb mi. És fins addictiu.