Mandar um cafézinho para o programador:


Me ajude a transformar café em código!

A Função sizeof() em C++ e outros tipos de dados (short, long e unsigned)

Neste tutorial de nosso curso de C++, vamos dar continuidade ao estudo das variáveis, agora aprendendo um pouco mais sobre seus tipos, tamanho e precisão.

Tamanho de dados: a função sizeof()

C++ é uma linguagem poderosa, e isso não é maneira de falar.
Uma prova disso é a responsabilidade que o programador tem com cada byte da memória do computador, através da linguagem C++.

Sempre que declaramos uma variável estamos, diretamente, reservando bytes da memória de sua máquina, e dando acesso ao endereço daquele espaço reservado através do nome da variável.

Existe uma função (bloco de código, pronto para usar) que nos fornece o tamanho de cada tipo de dado que estudamos, é a função: sizeof()

Para saber o tamanho de um dado, basta colocá-lo entre parêntesis no comando: sizeof( variavel )
E ele 'retorna' o tanto de bytes ocupados.

O programa abaixo mostra os valores reservados para cada tipo de variável em meu computador:

#include <iostream>
using namespace std;

int main()
{
    cout << "Variável 'int' ocupa   : " << sizeof(int) << " byte(s)" << endl;
    cout << "Variável 'char' ocupa  : " << sizeof(char) << " byte(s)" << endl;
    cout << "Variável 'float' ocupa : " << sizeof(float) << " byte(s)" << endl;
    cout << "Variável 'double' ocupa: " << sizeof(double) << " byte(s)" << endl;
    cout << "Variável 'bool' ocupa  : " << sizeof(bool) << " byte(s)" << endl;
    return 0;
}

Faça no seu e poste nos comentários, isso pode mudar de um sistema operacional para outro.
No meu notebook o resultado foi:
Função sizeof() em C++

Tipo de dado inteiro: short, long e unsigned

Veja que um inteiro ocupa 4 bytes.

Seja pra armazenar o número 0, o 1, o 2112 ou o 2147483647, ele guarda 4 bytes da memória do seu computador. Mas, as vezes isso pode ser desperdício.

Vamos supor que você está trabalhando com um microcontrolador ou quer fazer o sistema de um relógio digital ou timer de microondas. Nesses casos, memória é um recurso RARO  e LIMITADÍSSIMO, quanto menos desperdiçarmos, melhor.

A solução é em vez de declarar 'int variavel', fazer:
short variavel;

Pois vai utilizar menos espaço em memória.

E caso esteja fazendo um software pra NASA estudar planetas que estão a bilhões de trilhões de km de distância e precisa usar número gigantescos? Aí você usa o long:
long variavel;

Lembrando que números inteiros são de dois tipos: os negativos e os positivos.
Se você vai trabalhar com idade, por exemplo, não faz sentido trabalhar com números negativos, concorda?

Nesse caso, use variáveis do tipo unsigned:
unsigned variavel;

A extensão numérica de cada tipo é:
short:  de -32.768 até +32.767
unsigned short: de 0 até +65,535
int: de -2.147.483.648 até +2.147.483.647
unsigned int: de 0 até 4.294.967.295
long: de -2.147.483.648 até +2.147.483.647
unsigned long: de 0 até 4.294.967.295

Vamos ver quanto de espaço ocupa cada um desses tipos?
O código é:

#include <iostream>
using namespace std;

int main()
{
    cout << "Variável 'short' ocupa           : " << sizeof(short) << " bytes" << endl;
    cout << "Variável 'unsigned short' ocupa  : " << sizeof(unsigned short) << " bytes" << endl;
    cout << "Variável 'unsigned int' ocupa    : " << sizeof(unsigned int) << " bytes" << endl;
    cout << "Variável 'long' ocupa            : " << sizeof(long) << " bytes" << endl;
    cout << "Variável 'unsigned long' ocupa   : " << sizeof(unsigned long) << " bytes" << endl;
    return 0;
}

E o resultado:
Curso de C++ online grátis

Precisão de float e double

Já que estamos falando de variáveis inteiras, seu alcance, tamanho e precisão, vamos revisar novamente as variáveis float e double, usadas para representar números decimais:
  • float: precisão única, ocupa 4 bytes e vai de 3,4 x 10^(-38) até 3,4x10^38
  • double e long double: precisão dupla, ocupam 8 bytes e vão de 1,7 x 10^(-308) até 1,7x10^308

Referências

4 comentários:

  1. /*programa que calcula o tamanho dos tipos variáveis*/

    #include

    using namespace std;

    int main()
    {
    cout << "A variavel 'int' ocupa: " << sizeof(int)<<"Byte(s)" << endl;
    cout << "A variavel 'char' ocupa: " << sizeof(char)<<"Byte" << endl;
    cout <<"A variavel 'float' ocupa: " << sizeof(float)<<"Byte" << endl;
    cout << "A variavel 'double' ocupa: " << sizeof(double)<<"Byte" << endl;
    cout << "A variavel 'bool' ocupa: " << sizeof(bool)<<"Byte" << endl;
    cout << "A variavel 'short' ocupa: " << sizeof(short)<<"Byte" << endl;
    cout << "A variavel 'unsigned short' ocupa " <<sizeof(unsigned short) <<"Byte" << endl;
    cout << "A variavel 'unsigned int' ocupa" <<sizeof(unsigned int) <<"Byte" << endl;
    cout << "A variavel 'long' ocupa: " << sizeof(long)<<"Byte" << endl;
    cout << "A variavel 'unsigned long' ocupa " <<sizeof(unsigned long) <<"Byte" << endl;
    return 0;
    }

    ResponderExcluir
  2. Ótimo trabalho. Preciso de ajuda: no meu caso, os acentos não saem de forma correta. Podem ajudar?

    ResponderExcluir
    Respostas
    1. Provavelmente isso está acontecendo por conta da linguagem padrão das IDEs, que é o ingles. Dependendo da IDE que você estiver utilizando, você consegue escrever uma função que muda a língua do ambiente para o português. Recomendo você pesquisar sobre.

      Excluir

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo