Junior
Qual é a diferença entre os tipos uint e int na linguagem Go?
sobes.tech IA
Resposta da IA
Os tipos uint e int em Go representam tipos de dados inteiros, mas diferem no intervalo de valores possíveis e no seu significado (com sinal/sem sinal).
int (inteiro com sinal):
- Pode armazenar números positivos, negativos e zero.
- O tamanho em bits (e, portanto, o intervalo) depende da arquitetura do computador (32 ou 64 bits). Em uma arquitetura de 32 bits, é 32 bits, e em uma de 64 bits, é 64 bits.
- Intervalo: de -2<sup>n-1</sup> até 2<sup>n-1</sup> - 1, onde n é o número de bits.
uint (inteiro sem sinal):
- Pode armazenar apenas números não negativos, começando do zero.
- O tamanho em bits também depende da arquitetura do computador (32 ou 64 bits) e corresponde ao tamanho de
int. - Intervalo: de 0 até 2<sup>n</sup> - 1, onde n é o número de bits.
A principal diferença é que int usa um bit para representar o sinal (positivo ou negativo), enquanto que uint usa todos os bits para representar o valor do número. Isso permite que uint armazene um intervalo máximo positivo duas vezes maior em comparação com int do mesmo tamanho.
Ao escolher entre int e uint, deve-se considerar:
- Se o número pode ser negativo. Se sim, use
int. - Se é necessário um intervalo positivo máximo. Se não, e valores negativos não são necessários,
uintpode ser adequado. - O tipo
uinté frequentemente usado para representar máscaras de bits, identificadores, tamanhos ou quantidades que, por sua natureza, não podem ser negativos.
// int pode ser negativo
var signedInt int = -10
// uint não pode ser negativo
// var unsignedInt uint = -10 // Erro de compilação
// Valores máximos (em um sistema de 64 bits)
// fmt.Println(math.MaxInt64) // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (aproximadamente o dobro)
// A conversão implícita não é possível entre int e uint
var a int = 5
var b uint = 5
// if a == b { ... } // Erro: incompatibilidade de tipos sem conversão explícita
// Conversão explícita
var c int = 10
var d uint = uint(c)
var e uint = 20
var f int = int(e)