Today we're going to delve a little deeper into data types in C, and the reasons behind them.
Você Já se perguntou como a máquina sabe que um determinado valor armazenado é int ou char?
Qualquer tipo seja int, char ou outro qualquer, sempre guarda o valor em binário, mesmo que no código escrevas:
int x = 42;
O valor verdadeiro guardado sempre será binário:
00101010
O computador não guarda decimal, não guarda hex, não guarda octal nem tão pouco char — só bits. O código escrito é apenas REPRESENTAÇÃO HUMANA
Toda linguagem foi exatamente criada e estruturada para se aproximar a linguagem humana, justamente para facilitar a compreensão, mas ao compilar ela é convertida usado o calculos como sistemas de conversões e passado para a máquina, ou seja o teu int, ou o teu hex, nem chega na máquia nessas bases, tudo o que a máquina interpreta é informação já compilada.
Então, quando escreves 42 ou char, isso é só texto no teu código.
O compilador faz:
42 (decimal) → 00101010 (binário na memória)
Mas então e como imprimimos sempre no formato correcto?
%d, %p, %f, o %d do printf diz:“Interpreta estes bits como decimal.” Ou seja:
printf("%d", x);
O printf pega nos bits dentro de x e mostra em decimal, se usares %x, %o, %b → a interpretação muda, ou seja, o mesmo valor binário, em vários sistema de numeração:
printf("%d", x); // decimal → 42 printf("%x", x); // hex → 2a printf("%o", x); // octal → 52
Os bits são os mesmos.
Não confunda os tipos com base, por ex. int é um TIPO, não uma base, ele é apenas um recipiente de bits (32 bits normalmente).
A “base” só existe no:
42 ou 0x2A)printf escolhe como mostrar)🧠 Resumo super claro:
printf converte de binário → base que pedimos;int é só um conjunto de bits;Um tipo (
int,char) armazena a informação embinário. Por exemplo:int = 42, é só a forma como nós humanos escrevemos o código para trabalhar com números utilizando uma determinada linguagem de programação, e para vermos no terminal na mesma base interpretamos esses valores usando %d no caso da linguagemC, caso usássemos uma outra flag de formatação, veríamos o mesmo valor mas em outra base, porém o computador sempre vê em binário.