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!!!
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!) 
saudades do pascal…
16bits, não-sinalizado. 0 a 65535 (2^16 - 1)
Mas nada de usar char para fazer contas 
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