Ae galera
To com uma duvida…
seguinte
como age o operador de inversao de bits?
Por exemplo:
seja o numero 1 em binario (pra simplificar colocamos um byte)
10000001
Sendo que o digito mais significante eh o digito de sinal e assumindo que 1 eh positivo
se eu aplicar o operador de inversao de bit ficaria
01111110
ou seja algum numero negativo muito grande
mas ao fazer isso em um programa com esse codigo:
public class teste{
static char staticArray[] = new char[5];
public static void main(String[] args){
byte x = 1;
byte y =(byte) ~x;
System.out.println(y);
}
}
ele imprime -2…
nao entendi… alguem pode me explicar?
A representacao binaria de “1” eh “01”. Ao inverter os bits, fica “10”, que eh “2” positivo. Porem, como o sinal eh trocado, todos os outros bits mais a esquerda, que antes eram “0”, viram “1”, tornando o numero negativo.
byte b = 1;
System.out.println(Integer.toBinaryString(b));
b = (byte)~b;
System.out.println(Integer.toBinaryString(b));
[quote=“Rafael Steil”]Ele inverte todos os bits… “mais a esquerda” significa todos eles, nao somente um. Execute o programa para voce ver.
Rafael[/quote]
Mas rafael como eu disse:
Se sao todos bits entao
um byte tem 8 bits sendo q o de ordem mais alta eh o digito de sinal:
entao digamos 1 se o bit de ordem mais alta for 1 entao eh positivo
o numero “1” seria:
10000001
aplicando ~
01111110
q eh -2^21 =
-2097152
maos ao inves disso ele dah:
00000010 q eh o -2
os bits em amarelo
00[color=“yellow”]0000[/color]10 nao foram invertidos…
entao os bits que estao entre o bit de sinal e o primeiro bit 1 nao sao invertidos…
to errado?
agradeço sua ajuda
Nao, nao… “1” eh negativo, “0” eh positivo. Voce esta confundindo. Depois, a operacao de inversao eh feita como se fosse um int neste caso, tanto que voce precisa do cast para byte para fazer a atribuicao de novo… entao, na verdade, voce esta trabalhando com um numero de 32 bits ( mas nao que isso interfira no resultado neste caso ).
Eu nao to preocupado com o bit de sinal
To sim preocupado com os bits entre o bit de sinal e o primeiro 1 no valor original…
Tipo digamos entao que um inteiro tenha 4 bits(pra simplificar) e o bit de sinal eh + ou -
Entao 1 :
+001
Aplicando ~
-110
Que na verdade eh igual -5
entendeu???
se inverter todos os bits teria q funcionar assim…
me exoplica isso ai direito, como funciona nos bits…
valew
[/b]