1. Quais tipos de números existem?
Na programação a gente tá sempre lidando com números — desde a idade do usuário até o número de estrelas na galáxia ou centavos na conta do banco. Mas cada situação pede um tipo diferente de número: às vezes só precisa guardar inteiros, às vezes frações bem precisas, e às vezes só números "sem sinal de menos".
Números inteiros (int e outros)
Número inteiro — é aquele sem parte decimal.
Em C# o tipo mais usado é o int, mas tem outros também, que mudam de tamanho e de faixa de valores.
- int — é o tipo "padrão" pra inteiros. Cabe valor bem grande (ou pequeno) e não ocupa tanta memória.
Por exemplo, pra contar likes, idade, quantidade de dias no ano, quase sempre vai de int. - long — usa quando os valores podem ser gigantes (tipo bilhões ou trilhões).
Exemplo: guardar o total de views do YouTube na história. - short — é econômico, mas pouco usado. Serve quando tem muitos valores pequenos iguais (tipo dados de áudio, componentes de cor).
- byte — pra valores ainda menores, muito usado em gráficos e arquivos, onde economizar memória é importante.
Números fracionários (double, float, decimal)
Às vezes tu precisa trabalhar com números que têm parte decimal. Tipo temperatura, média do aluno, preço com centavos.
- double — é o tipo "default" pra guardar números fracionários. Preciso o suficiente pra maioria dos cálculos (exemplo: 3.1415926535…).
- float — mais leve e menos preciso, aparece mais em gráficos ou quando tem que processar muitos dados e economizar memória.
- decimal — feito pra contas financeiras, quando precisa precisão até os centavos, pra não "perder" nada por causa do jeito que o computador guarda frações. Tipo pra saldo, preço de produto, câmbio.
Tipos numéricos especiais
Em C# tem uns tipos numéricos extras pra casos especiais:
- uint, ulong, ushort — tipos "sem sinal", só aceitam valores positivos, mas a faixa é o dobro dos equivalentes "com sinal".
- sbyte — pequeno, com sinal (pra guardar valores negativos e positivos de -128 até 127).
- BigInteger — quando tu precisa lidar com números enormes, maiores que os tipos padrão, tipo em criptografia ou cálculos astronômicos.
2. Números com e sem sinal
Tipo com sinal pode guardar tanto número positivo quanto negativo. Isso é útil quando o valor pode ser "pra cima ou pra baixo de zero": tipo temperatura, saldo, altura em relação ao mar.
Tipo sem sinal — só zero e positivos. Serve quando não faz sentido ter negativo — tipo quantidade de pessoas na sala, bytes num arquivo, tempo.
Exemplo:
- int (com sinal): -10, 0, 50
- uint (sem sinal): 0, 10, 1000
Usando tipo sem sinal, tu consegue guardar o dobro do valor máximo (já que não tem "metade negativa"). Usa quando tem certeza que não vai ter valor negativo.
Tipos inteiros com sinal
| Tipo | Tamanho | Faixa de valores | Exemplo de uso |
|---|---|---|---|
|
1 byte | -128 até 127 | -128, 0, 127 |
|
2 bytes | -32 768 até 32 767 | -1000, 0, 32000 |
|
4 bytes | -2 147 483 648 até 2 147 483 647 | -1000000, 0, 2000000 |
|
8 bytes | -9 223 372 036 854 775 808 até 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
Tipos inteiros sem sinal
| Tipo | Tamanho | Faixa de valores | Exemplo de uso |
|---|---|---|---|
|
1 byte | 0 até 255 | 0, 128, 255 |
|
2 bytes | 0 até 65 535 | 1000, 65000 |
|
4 bytes | 0 até 4 294 967 295 | 100, 4000000000 |
|
8 bytes | 0 até 18 446 744 073 709 551 615 | 1, 18_000_000_000_000 |
Tipos fracionários
| Tipo | Tamanho | Exemplo de valores | Descrição |
|---|---|---|---|
|
4 bytes | 3.14f, -0.001f | precisão simples (7 dígitos) |
|
8 bytes | 3.1415, -1.7E+308 | precisão dupla (15-16 dígitos) |
|
16 bytes | 0.1m, 12345.6789m | alta precisão pra grana |
3. Sufixos pra números
Às vezes tu precisa dizer explicitamente qual tipo tu quer usar pro número. Isso se faz usando sufixos:
- L ou l — pro tipo long (tipo 10000000000L)
- U ou u — pro tipo uint (tipo 123U)
- F ou f — pro tipo float (tipo 3.14f)
- D ou d — pro tipo double (normalmente não precisa, porque número fracionário sem sufixo já é double)
- M ou m — pro tipo decimal (tipo 99.99m — super importante pra dinheiro!)
Se não colocar sufixo, inteiro é int por padrão, e fracionário é double. Por exemplo, 42 é int, e 3.14 é double.
Pra que serve isso? Por exemplo, pra não dar erro quando tu tenta guardar um número grande numa variável long:
long bigNumber = 9000000000L; // se tirar o L, vai dar erro de compilação
E pra dinheiro, sempre usa decimal com sufixo m:
decimal price = 999.99m;
4. Separador underline _
Quando o número é grandão, é fácil se perder nos zeros. Pra deixar mais bonito e fácil de ler, em C# tu pode usar underlines dentro do número.
int population = 146_700_000;
long stars = 100_000_000_000L;
Isso é totalmente válido: o compilador ignora os underlines, e tu já vê os grupos de zeros de cara. Só não pode colocar underline no começo, no fim, depois do ponto ou antes do sufixo.
5. Tipo caractere char
Às vezes o programa precisa lidar não com números, mas com caracteres: letra, número, símbolo, até espaço. Pra isso tem o tipo especial — char.
O que é char?
É uma variável que guarda um caractere só:
- letra latina ou cirílica ('A', 'я')
- número ('5')
- símbolo especial ('#', '%', '@')
- caractere de controle ('\\n' — quebra de linha)
Detalhes:
- O valor do tipo char vai entre aspas simples: char letter = 'B';
- Na real, dentro do char fica o código numérico do caractere (em Unicode), então tu pode comparar, converter pra int e até fazer umas contas simples:
char a = 'A';
char b = (char)(a + 1); // 'B'
int code = a; // 65 — código da letra 'A'
Dá pra usar caracteres especiais, tipo: char tab = '\\t'; // caractere de tabulação
Pra que serve o char?
Pra trabalhar com texto caractere por caractere (tipo checar a primeira letra de uma string, procurar pontuação, ler senha caractere por caractere).
GO TO FULL VERSION