{"id":128,"date":"2021-10-27T18:50:22","date_gmt":"2021-10-27T18:50:22","guid":{"rendered":"https:\/\/solinfo.ro\/blog\/?p=128"},"modified":"2024-05-17T20:31:19","modified_gmt":"2024-05-17T20:31:19","slug":"variabile_in_cpp","status":"publish","type":"post","link":"https:\/\/solinfo.ro\/blog\/variabile_in_cpp\/","title":{"rendered":"Stocarea variabilelor \u00een C++"},"content":{"rendered":"\n<p>\u00cen fiecare limbaj de programare exist\u0103 no\u021biunea de variabil\u0103, care reprezint\u0103 un loc unde se pot memora valori. Memorarea variabilelor se face \u00een memoria dispozitivului, sub form\u0103 de bi\u021bi (0 sau 1). Acest articol v\u0103 va prezenta modul \u00een care se memoreaz\u0103 variabilele \u00een limbajul C++.<\/p>\n\n\n\n<p>Pentru \u00eenceput, este important s\u0103 \u0219ti\u021bi c\u0103 exist\u0103 mai multe tipuri de variabile: <em>int<\/em>, <em>long long<\/em>, <em>unsigned<\/em>, etc.<\/p>\n\n\n\n<ul class=\"has-white-background-color has-background wp-block-list\"><li><em>int <\/em>poate memora valori \u00eentregi de la <em>-2<sup>31<\/sup><\/em> p\u00e2n\u0103 la <em>2<sup>31<\/sup>-1<\/em>;<\/li><li><em>long long<\/em> poate memora valori \u00eentregi de la <em>-2<sup>63<\/sup><\/em> p\u00e2n\u0103 la <em>2<sup>63<\/sup>-1<\/em>;<\/li><li><em>unsigned <\/em>poate memora valori \u00eentregi de la <em>0<\/em> p\u00e2n\u0103 la <em>2<sup>32<\/sup>-1<\/em>, etc.<\/li><\/ul>\n\n\n\n<p>Dar v-a\u021bi \u00eentrebat vreodat\u0103 de unde provin aceste numere? De ce limita maxim\u0103 a unei variabile <em>unsigned <\/em>este <em>4294967295 <\/em>\u0219i nu <em>9999999999<\/em>? Pentru a afla r\u0103spunsul, trebuie s\u0103 cunoa\u0219tem cum sunt stocate variabilele \u00een memorie.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image.png\" alt=\"\" class=\"wp-image-154\" width=\"842\" height=\"175\" srcset=\"https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image.png 622w, https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image-300x62.png 300w, https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image-500x104.png 500w\" sizes=\"auto, (max-width: 842px) 100vw, 842px\" \/><figcaption><sup>O parte din memoria unui program, partea selectat\u0103 cu ro\u0219u este o variabil\u0103 de tip <em>unsigned<\/em><\/sup><\/figcaption><\/figure>\n\n\n\n<p>Folosind programul <a href=\"http:\/\/cheatengine.org\" target=\"_blank\" rel=\"noreferrer noopener\">Cheat Engine<\/a>, putem observa mai sus o parte din memoria alocat\u0103 unui program. Ceea ce este marcat cu ro\u0219u este memoria unei variabile de tip <em>unsigned <\/em>care are valoarea <em>10000<\/em>. Memoria de mai sus este afi\u0219at\u0103 \u00een baza hexadecimal\u0103, \u00eens\u0103 calculatorul tot pe sistemul binar func\u021bioneaz\u0103. Citirea unei variabile \u00een memorie se face cu c\u00e2te un octet de la dreapta la st\u00e2nga. Spre exemplu, variabila marcat\u0103 cu ro\u0219u este, de fapt, <em>00002710 <\/em>\u00een baza 16.<\/p>\n\n\n\n<p><em>F <\/em>reprezint\u0103 cea mai mare cifr\u0103 \u00een reprezentarea \u00een baza hexadecimal\u0103 a oric\u0103rui num\u0103r (<em>0<\/em>, <em>1<\/em>, <em>2<\/em>, <em>3<\/em>, <em>4<\/em>, <em>5<\/em>, <em>6<\/em>, <em>7<\/em>, <em>8<\/em>, <em>9<\/em>, <em>A<\/em>, <em>B<\/em>, <em>C<\/em>, <em>D<\/em>, <em>E<\/em>, <em>F<\/em>). Dar ce se \u00eent\u00e2mpl\u0103 dac\u0103 umplem tot spa\u021biul marcat cu cifre <em>F<\/em>? \u00cen imaginea de mai jos, putem observa c\u0103 dup\u0103 ce umplem spa\u021biul marcat cu <em>FFFFFFFF<\/em>, adic\u0103 32 de cifre de 1 \u00een scrierea binar\u0103, ob\u021binem num\u0103rul maxim al unui num\u0103r de tip unsigned, adic\u0103 <em>4294967295 <\/em>(afi\u0219at \u00een partea de jos a imaginii).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image-1.png\" alt=\"\" class=\"wp-image-156\" width=\"843\" height=\"184\" srcset=\"https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image-1.png 754w, https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image-1-300x66.png 300w, https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image-1-500x109.png 500w, https:\/\/solinfo.ro\/blog\/wp-content\/uploads\/2021\/10\/image-1-750x165.png 750w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><figcaption><sup>Valoarea maxim\u0103 a unei variabile de tip <em>unsigned<\/em><\/sup><\/figcaption><\/figure>\n\n\n\n<p>\u00cen concluzie, trebuie s\u0103 re\u021bine\u021bi c\u0103 fiecare tip de variabil\u0103 are un num\u0103r setat de bi\u021bi pe care poate memora valori (\u00een exemplul de mai sus am luat <em>unsigned <\/em>care are 4 octe\u021bi, adic\u0103 32 de bi\u021bi) \u0219i c\u0103 valorile maxime ale acestor tipuri de variabile sunt determinate dup\u0103 umplerea memoriei variabilei cu valori de 1 \u00een scrierea binar\u0103.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Acest articol prezint\u0103, simplu \u0219i scurt, modul \u00een care C++ stocheaz\u0103 variabilele \u00een memorie \u0219i cum se afl\u0103 valorile maxime a tipurilor de variabile.<\/p>\n","protected":false},"author":4,"featured_media":214,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,45],"tags":[33,32,34,30,31,19,35,26,28,27],"class_list":["post-128","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cpp","category-despre-limbaj","tag-baza-16","tag-baza-2","tag-binar","tag-bits","tag-bytes","tag-c","tag-hexadecimal","tag-memorie","tag-variabila","tag-variabile"],"_links":{"self":[{"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/posts\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/comments?post=128"}],"version-history":[{"count":17,"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/posts\/128\/revisions"}],"predecessor-version":[{"id":213,"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/posts\/128\/revisions\/213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/media\/214"}],"wp:attachment":[{"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/media?parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/categories?post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solinfo.ro\/blog\/wp-json\/wp\/v2\/tags?post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}