Tipo de dados de 0..255

Em C existe o tipo unsigne char que vai de 0…255. Em java gostaria de usar o tipo byte, só que ele pega uma faixa de -128…127, ou seja, pega 256 elementos só que com a parte negativa. Existe alguma maneira de fazer o byte do java pegar apenas os valores entre 0 e 255, ou existe algum outro tipo específico pra isso?

Nao existem tipos unsigned em Java, e nenhum outro tipo que va de 0 a 255. :frowning:

O tipo char não possui bit de sinal (unsigned). Porém o tamanho dele é de dois bytes.

Use o tipo byte mesmo, mas você pode usar o seguinte truque em alguns lugares, quando precisar convertê-lo para um int que vá de 0 a 255: efetue um “AND” com o valor 0xFF. Faço isso direto sem problemas.

Por exemplo:

byte b = (byte) 0xCA;
System.out.println (b); // imprime -54, como você deve saber
int b1 = b & 0xFF;
System.out.println (b1); // imprime 202, que é o que você queria…

Legal meu, não sabia disso. Valeu :slight_smile:

Sempre usava algo tipo de

  public static int getInt(byte b) {
    int i = b;
    if(b<0) i = 256+b;
    return i;
  }

Que faz a mesma coisa mas é meio chato.

-Sami

“char” nao eh nem um tipo numerico - nao vale :smiley:

Tudo bem, eu sei que no fim das contas eh tudo um monte de bit voando pra la e pra ca. Mas voce conseguiria resistir ver um codigo que usasse chars pra fazer contas sem tentar arrancar os proprios olhos com a caneta bic mais proxima depois? :mrgreen:

Já vi esse filme antes…
Alguns tipos do Java e do C têm o mesmo nome, mas comprimentos diferentes. Isso pode dar um nó na cabeça de quem veio do C/C++.
Então o char do Java na verdade é o wchar_t ou o unsigned short do C, e o long do Java, o long long de alguns compiladores, ou o __int64 de outros.
Ainda outro dia li algo sobre “cuidado, o Java vai sofrer com o bug do ano 2038 porque usa um ‘long’ para guardar a informação de tempo”.
Só que o ‘long’ do Java tem exatamente 8 bytes e o do C costuma ter 4 bytes (depende do processador e do compilador).
Portanto o problema não vai estourar em 2038 - só no ano 292.471.208 (quando o ‘long’ fica negativo) ou 584.944.387 (quando o long vai passar para 0 de novo), mas acho que você não vai ter de consertar esse problema… Daqui a 300 (ou 600) milhões de anos, o que estará andando pela face da Terra?
Em 2038 realmente teremos problemas, mas não com programas feitos em Java.

Não é tão incomum usar char como um número. Aliás, veja a pergunta feita. Ele usa unsigned char em C. Se precisamos de um único byte para que vamos declarar um short ou int para armazenamento (em C). Depende da aplicação.
Se não for algo que precise tratar bits (como criptografia, por exemplo), basta colocar um set para o campo e declará-lo como short. No set, é só testar se o valor está entre 0 e 255.