CCT-UFCA/Ciência da Computação/Introdução à Programação/Tipos Básicos de Dados, Operadores e Expressões
Tipos Básicos de Dados
[editar | editar código]Os tipos de uma variável definem o tipo de dado que ela pode armazenar e ajudam tanto o compilador a alocar a memória corretamente quanto o desenvolvedor a estruturar seu código. Na linguagem C, os tipos básicos são: char, int, float, double e void. Cada tipo de variável ocupa um número específico de bytes na memória, o que determina a faixa de valores que pode ser armazenada. Por exemplo, uma variável do tipo int geralmente ocupa 4 bytes (32 bits) e pode armazenar números inteiros no intervalo de -2.147.483.648 a 2.147.483.647 (considerando um sistema com inteiros de 32 bits e sinalizados).
A tabela abaixo mostra os principais tipos e seus respectivos intervalos de valores (podendo variar conforme a arquitetura e o compilador):
| Tipo | Bits | Intervalo de Valores |
|---|---|---|
| char | 8 | Caracteres ASCII (0 a 255) |
| int | 32 | -2.147.483.648 A 2.147.483.647 |
| float | 32 | 1,175494E-038 A 3,402823E+038 |
| double | 64 | 2,225074E-308 A 1,797693E+308 |
| void | Não aplicavel | Sem valor |
Tipo char
[editar | editar código]Esse tipo é utilizado para o armazenamento de um único caractere (ou número que o representa) representado por um código da tabela ASCII. Você pode encontrar a tabela completa aqui: Tabela ASCII.
Exemplo de declaração:
char caractereA = 'A';
// De forma alternativa
char caractereA = 65;
Tipo int
[editar | editar código]Nos tipos numéricos, podemos armazenar valores inteiros, ou seja, sem parte decimal, utilizando o tipo int. No entanto, é importante ter cuidado ao usá-lo em cálculos, pois qualquer parte decimal será descartada na atribuição.
Exemplo de declaração:
int num = 1
// Aqui o valor de num ainda é 1
int num = 1.1
Tipo float e double
[editar | editar código]Os tipos float e double armazenam números com parte decimal, mas diferem na precisão. Enquanto float ocupa menos espaço e oferece precisão simples, double utiliza o dobro de bits, permitindo representar valores maiores com mais exatidão. A escolha entre eles depende do nível de precisão necessário.
Os tipos numéricos armazenam mais do que apenas o valor em si. Eles também reservam bits para informações como sinal, mantissa e expoente, no caso de números de ponto flutuante. Esses detalhes serão explorados mais adiante.
Exemplo de declaração:
float num = 2.234f;
double num = 4.23455449993;
Tipo void
[editar | editar código]Esse é um tipo especial que será explorado em seções posteriores. Ele indica a ausência de um tipo específico e é utilizado em funções sem retorno, além de permitir a criação de ponteiros genéricos para armazenar endereços de qualquer tipo de dado.
Modificadores
[editar | editar código]Outro elemento importante associado aos tipos são os modificadores. Eles podem ajustar a capacidade de um tipo, aumentando ou reduzindo sua precisão para otimizar o uso de memória. Além disso, permitem fixar a quantidade de bits utilizada, tornando o comportamento do tipo consistente, independentemente do processador. Basta adicionar antes do tipo na declaração, veja o modelo:
<modificadores> <tipo> <nome da variável> = <valor>
// Exemplo
unsigned int num = 4;
Veja a tabela completa com os tipos e seus modificadores:
| TIPO | BITS | INTERVALO DE VALORES |
| char | 8 | -128 A 127 |
| unsigned char | 8 | 0 A 255 |
| signed char | 8 | -128 A 127 |
| int | 32 | -2.147.483.648 A 2.147.483.647 |
| unsigned int | 32 | 0 A 4.294.967.295 |
| signed int | 32 | -32.768 A 32.767 |
| short int | 16 | -32.768 A 32.767 |
| unsigned short int | 16 | 0 A 65.535 |
| signed short int | 16 | -32.768 A 32.767 |
| long int | 32 | -2.147.483.648 A 2.147.483.647 |
| unsigned long int | 32 | 0 A 4.294.967.295 |
| signed long int | 32 | -2.147.483.648 A 2.147.483.647 |
| float | 32 | 1,175494E-038 A 3,402823E+038 |
| double | 64 | 2,225074E-308 A 1,797693E+308 |
| long double | 96 | 3,4E-4932 A 3,4E+4932 |
Operadores e Expressões
[editar | editar código]Em C, os operadores são símbolos usados para realizar cálculos, comparações e operações bit a bit. As expressões combinam operadores, variáveis e valores para produzir um resultado. Cada operador possui uma ordem de precedência, definindo a sequência de execução das operações. Além disso, a associatividade indica se a avaliação ocorre da esquerda para a direita ou vice-versa. Parênteses podem ser usados para modificar a ordem padrão.
Veja a lista de operadores organizados por ordem de precedência:
| Precedência | Operadores | Descrição | Associatividade |
|---|---|---|---|
| 1 (mais alta) | (), [], ->, . |
Parênteses, índice de array, acesso a membro via ponteiro e ponto | Esquerda para direita |
| 2 | ++, --, + (unário),
|
Incremento/decremento, unários, negação, bitwise NOT, ponteiro, referência, cast e tamanho de tipo | Direita para esquerda |
| 3 | *, /, % |
Multiplicação, divisão e módulo | Esquerda para direita |
| 4 | +, - |
Adição e subtração | Esquerda para direita |
| 5 | <<, >> |
Deslocamento de bits | Esquerda para direita |
| 6 | <, <=, >, >= |
Comparação | Esquerda para direita |
| 7 | ==, != |
Igualdade e diferença | Esquerda para direita |
| 8 | & |
AND bit a bit | Esquerda para direita |
| 9 | ^ |
XOR bit a bit | Esquerda para direita |
| 10 | | |
OR bit a bit | Esquerda para direita |
| 11 | && |
AND lógico | Esquerda para direita |
| 12 | || |
OR lógico | Esquerda para direita |
| 13 | ?: |
Operador ternário | Direita para esquerda |
| 14 | =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= |
Atribuição | Direita para esquerda |
| 15 (mais baixa) | , |
Vírgula (avaliação múltipla) | Esquerda para direita |