Definição tipo "byte"

Surgiu uma duvida minha a respeito do tipo byte, possa ser q esteja ate complicando. Qnd estudei Pascal ou foi C (mto tempo atras), o byte armazenava 0 a 127, se n me engane. Em Java, esse tipo armazena letras e numeros? Como eh a definicao dele, vlws…

O tipo byte é um tipo integral que armazena dados em 8 bits e é sinalizado. Sendo assim um bit é do sinal e os 7 restantes para o número, entao 2^7 = 128

Que vai dar -128 até 127

Um byte é composto por 8 bits.

Em C e C++ não existe um tipo “byte” mas um “signed char” (-128 a +127, que cabe em 8 bits) e outro “unsigned char” (0 a +255).

Em Pascal você pode definir um tipo como:

type byte : 0…255;

ou

type byte : -128…127;

[quote=davidbuzatto]O tipo byte é um tipo integral que armazena dados em 8 bits e é sinalizado. Sendo assim um bit é do sinal e os 7 restantes para o número, entao 2^7 = 128

Que vai dar -128 até 127[/quote]

Aham, Java não é que usa um “bit para o sinal”, já que usa “complemento de dois”. Senão nós teríamos algo como:
-127… -0 … +0 … +127

Se o bit mais significativo for 1, o número é negativo, mas não é exatamente o sinal. Coisas da aritmética de “complemento de 2”.

No caso de números de ponto flutuante a situação é diferente; existe realmente um bit que é o sinal.

Mas alem de numeros eu tb posso armazenar um char, por exemplo ‘A’ num byte, confere?

[quote=thingol][quote=davidbuzatto]O tipo byte é um tipo integral que armazena dados em 8 bits e é sinalizado. Sendo assim um bit é do sinal e os 7 restantes para o número, entao 2^7 = 128

Que vai dar -128 até 127[/quote]

Aham, Java não é que usa um “bit para o sinal”, já que usa “complemento de dois”. Senão nós teríamos algo como:
-127… -0 … +0 … +127

Se o bit mais significativo for 1, o número é negativo, mas não é exatamente o sinal. Coisas da aritmética de “complemento de 2”.

No caso de números de ponto flutuante a situação é diferente; existe realmente um bit que é o sinal.
[/quote]

Ah… entendi

Thanx!

Pode, pq na verdade o char tbm é um tipo integral, ele armazena o valor numérico correspondente ao número.

É importante ressaltar que no Java é bom não confundir caracteres com bytes.
O tipo “char” do Java é um tipo primitivo, que tem 16 bits (não 8) e pode conter os caracteres Unicode que vão de 0 até 65535 *.
Um byte tem apenas 8 bits, e no caso do Java contém números que vão de -128 a +127.
Há regras de transformação de seqüências de bytes em seqüências de caracteres (os chamados “encodings”), mas elas não são diretas (1 para 1).
Já vi muitos problemas porque as pessoas acham que Java == C e que uma string pode conter quaisquer bytes. Isso dá um monte de problemas.
Tem gente que acha que, como em C, devemos terminar uma string por um zero binário.
Outros acham que se eu puser um byte 0x80 em uma string ele não será alterado - mas o “encoding” padrão do Java “estraga” esses bytes.

(* Estou simplificando isto - para maiores detalhes, veja www.unicode.org).