Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Ushort, ulong, em C#

Como vai amigo?

Se os tipos de valores "Ushort e etc" são valores sem sinais, é possível fazer operações matemáticas com eles, uma vez que os sinais podem estar com outros valores que aceitam sinais?

Muito obrigado e tenha bons estudos.

6 respostas
solução!

Os tipos de dados primitivos prefixados com "u" são versões não assinadas com os mesmos tamanhos de bits. Efetivamente, isso significa que eles não podem armazenar números negativos, mas, por outro lado, podem armazenar números positivos duas vezes maiores que seus equivalentes assinados. As contrapartes assinadas não têm o prefixo "u".

Os limites para int (32 bits) são:

int: –2147483648 to 2147483647

uint: 0 to 4294967295

E por muito tempo (64 bits):

long: -9223372036854775808 to 9223372036854775807

ulong: 0 to 18446744073709551615


Números inteiros

No .NET os números inteiros são definidos por 3 tipos que são: int, long e short.

  • O int é comumente usado no geral para números considerados razoavéis;
  • O long é utilizado para números longos;
  • O short para números menores como seus nomes sugerem.

Todos os 3 tipos acima descritos contam com os tipos unsigned que significa um tipo sem sinal. Então enquanto o int aceita valores negativos, o uint aceita apenas valores positivos. O mesmo acontece com o long, ulong, short e ushort. Em um exemplo mais prático, poderiamos atribuir um valor negativo a um destes tipos mas não para um unsigned, desta forma:


short saldo = 10; // OK
ushort saldoNegativo = -10; // ERROR

Acima vemos um valor sendo atribuido corretamente para a variável saldo na primeira linha como definido no comentário. já na segunda linha, ao tentar atribuir m valor negativo ao tipo unsigned temos o comentário indicando que é uma atribuição incorreta.

Os tipos unsigned ocupam o mesmo tamanho de memória que seus tipos padrões. Sendo assim o int e uint ocupam 32 bits, o short e ushort ocupam 16 bits de memória e o long e ulong ocupam 64 bits de memória.

Números reais

Em relação a números reais, ou popularmente ditos "números quebrados", o C# disponibiliza também 3 tipos, são eles o float que aloca 32 bits de memória, o double que aloca 64 bits e o decimal que aloca 128 bits de memória. Estes tipos não contam com os tipos unsigned e por padrão podem possuem assimilação a valores positivos e negativos.

Podemos tomar como exemplo de atribuição de um valor para cada um destes tipos o seguinte código:


double salarioA = 3.000;
float salarioB = 3.000f;
decimal salarioC = 3.000m;

Note que na declaração do valor do tipo double atribuimos o valor normalmente enquanto para declarar o float foi necessário adicionar a letra "f" ao fim do valor e no decimal a letra "m" também no fim da declaração do valor. Por padrão o C# reconhece um valor com ponto como sendo double e por este motivo precisamos adicionar a letra no fim da declaração ao atribuir valor aos outros tipos.

Todos os números em C# e .NET são tipos que iniciam com um valor 0.

TypeSizeMinimum ValueMaximum Value
sbyte8-bit (signed)-128127
byte8-bit (unsigned)0255
short16-bit (signed)-3276832767
ushort16-bit (unsigned)065535
int32-bit (signed)-21474836482147483647
uint32-bit (unsigned)04294967295
long64-bit (signed)-92233720368547758089223372036854775807
ulong64-bit (unsigned)018446744073709551615

Alisson, boa noite.

Caso tenho de ajudado com as suas dúvidas, por favor finalizar o tópico como solucionado.

Bons estudos. Um abraço.

Eduardo

Alisson, boa noite.

Por favor finalizar o tópico como solucionado caso tenha te ajudado.

Um abraço. Bons estudos.

Eduardo

Alisson, bom dia.

Por favor finalizar o tópico como solucionado caso tenha te ajudado.

Um abraço. Bons estudos.

Eduardo

Alisson, boa noite.

Caso ainda tenha alguma dúvida registrar aqui.

Por favor finalizar o tópico como solucionado caso tenha te ajudado.

Um abraço. Bons estudos.

Eduardo

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software