Somando byte

12 respostas
C

Dae Galera,
Como eu somo byte???
Ex: 10101010 + 01010101 = 11111111

E se estourar ele “dá a volta”, ou seja, pega o valor excedido de um byte cheio!

Me fiz entender?!

Valeu!!!

12 Respostas

S

Não entendi bem o que quer dizer com “somando byte”.

Na prática, qualquer operação aritmética é realizada em bits pela dupla JVM+OS, como no seu exemplo

Mas o que é que se quer demonstrrar com isso?

Podemos considerar a soma acima como representando

170 + 85 = 255

ou, como o java faria (para o java, qualquer tipo inteiro numérico será considerado COM SINAL e COMPLEMENTO DE 2):

10101010 = -85
   + 01010101 =  84
------------------------
     11111111 =  -1

E, se quisermos os valores de 170 + 85, pelo fato de estarmos usando complemento de dois para valores negativos, temos um problema: 8 bits nos permitem valores entre -128 e +127; portanto não é possível armazenar 170 num byte! Teremos que pensar num short (2 bytes - 16 bits). Aí ficaria assim:

0000000010101010 = 170
+ 0000000001010101 =  85
-------------------------
  0000000011111111 = 255

e, -85 + 84 = -1 ficaria:

1111111110101010 -85
+ 0000000001010101  84
-------------------------
  1111111111111111 = -1

Mas como coloquei no início, pra que mesmo precisamos saber isto?

Não fazemos simplesmente

public int soma(byte a, byte b) {
    return a + b;
}

e os bytes estarão somados?

R

usa a classe bitset…

C

“spier”:

Mas como coloquei no início, pra que mesmo precisamos saber isto?

Não fazemos simplesmente

public int soma(byte a, byte b) {
    return a + b;
}

e os bytes estarão somados?

Era isso que eu esperava… pois eu tentei uma vez soma byte e não rolou!!!
Mas se estourar??? O que vai acontecer???

Valeu!

R

boom… overflow…

eu acho… …no chute…

D

Sim! Overflow, certamente.

byte a = 127; byte b = 1; byte c = a + b; // vai ficar com -128

Você não recebe nenhum aviso ou erro, apenas resultados “incorretos”. Então se você tem interesse em fazer operações aritméticas, deve estar atento se o tipo de dados irá suportar a operação.
Byte irá representar números de -128…127.

R

vc tem certeza que byte não vai de 0…255?

M

não, o byte em java é sinalizado, indo de -128 a 127… o unico tipo primitivo a pode ser representado como um numero e nao é sinalizado é o char, esse sim, vai de 0 a 35565 (me corrijam se estiver enganado!) :slight_smile:

R

saudades do pascal…

D

16bits, não-sinalizado. 0 a 65535 (2^16 - 1)

Mas nada de usar char para fazer contas :wink:

Use short, int ou long. Em java são todos com sinal.

C

Existe unsigned byte ???

Valeu!

D

Não. Todos os tipos inteiros são sinalizados em Java.

S

Só para ajudar…

boolean 1bit
byte      8 bits     -2^7  a  2^7 -1
short     16 bits   -2^15 a 1^15 -1
char      16 bits    0       a 2^16 -1
int         32 bits   -2^31 a 2^31 -1
long      64 bits   -2^63 a 2^63 -1
float      32 bits
double   64bits

conversões: (não é casting)
            char -> 
                         int -> long -> float ->double
byte -> short ->

 é válida a conversão se você consegue chegar ao tipo de retorno através das setas acima... EX: short não pode ser convertido para char... nem char para short... mas short pode ser convertido para int e char pode ser convertido para int.

Com casting pode tudo! (mesmo que tenha overflow or underflow)

[]s

Criado 22 de julho de 2004
Ultima resposta 27 de jul. de 2004
Respostas 12
Participantes 6