Somando byte

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!!!

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?

usa a classe bitset…

[quote=“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?[/quote]

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

Valeu!

boom… overflow…

eu acho… …no chute…

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.

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

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:

saudades do pascal…

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.

Existe unsigned byte ???

Valeu!

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

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 ->

Só é 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