Operadores sobre bits

7 respostas
J

Olá

Porque isso retorna -6

x = 5; ( 0000 0000 0000 0000 0000 0000 0000 0101)
x = ~x;

resulta em -6 (1111 1111 1111 1111 1111 1111 1111 1010)

A parte de trocar os bits em si eu sei. Mas nao sei pq esse monte de “1s” vale SOMENTE -6

Os positivos são fáceis, mas como traduzir os bits negativos?

Abraços

7 Respostas

F

o byte em java vai
-128 ate 127

uma vez eu ‘simulei’ um byte positvo somando 256 qdo ele fosse negativo,
nao sei se te ajuda…
da uma olhada no resultado do for abaixo

byte b = 0;	    
    for(int i=0; i < 256; i++) {
        if (b < 0)
            System.out.println(b + 256 + " " + b);
        else
            System.out.println(b + " = " + b);
        b++;
    }
J

Obrigado Fábio,

O problema está na minha pergunta, ela não ficou nada clara :razz:!

Eu queria saber como representar um inteiro de valor negativo, -856 por exemplo. Como ficaria a representação dele em binário?

Números positivos eu entendi, mas negativo eu não consegui perceber a lógica!

Abraços

S

0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7

1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1

Repare o seguinte: o bit mais significativo corresponde
ao bit do sinal (0 positivo e 1 negativo), a maquina
trabalha desta forma pq só enxerga 0 e 1 , então ela
reserva metade dos bits de um tipo inteiro p/ positivos e
metade para negativos, assim facilita ela fazer
operações entre os mesmos…
imagine a conta ( 3 - 4) a maquina faz isso da seguinte
maneira 0011 + 1100 = 1111 -> (-1). Desta forma
internamente tratou uma subtração como uma adição!!
por isso que a númeraçao é distribuida desta forma, pode
não ter muita lógica para nós, mas para a maquina tem…

talvez eu tenha complicado ainda mais… mas eh isso ae
espero que tenha ajudado

J

Oi Sens!

Depois de um certo esforço mental consegui entender sim! Era bem isso que eu queria saber!

Obrigado

F

Cara, eu faço da seguinte forma, por exemplo:

:arrow: se eu tenho o número -10 e quero saber qual é sua representação binária, eu pego o valor do 10 (positivo) = … 0000 0000 1010, inverto os bits = … 1111 1111 0101 e somo 1 (um) = … 1111 1111 0110 = -10. Isso se chama complemento 2’, é exatamente isso q a maquina faz! :wink:

:arrow: URUBUserve q para voltar o -10 = (… 1111 1111 0110) para 10 (… 0000 0000 1010) é só fazer a mesma coisa, ou seja, inverter os bits e somar 1 (um) novamente! :roll:

:arrow: Sens, uma dúvida: qdo a máquina soma dois número, ela faz um AND ou um OR, ou nenhum :lol: ?

S

“fabiostb”:
Cara, eu faço da seguinte forma, por exemplo:

:arrow: se eu tenho o número -10 e quero saber qual é sua representação binária, eu pego o valor do 10 (positivo) = … 0000 0000 1010, inverto os bits = … 1111 1111 0101 e somo 1 (um) = … 1111 1111 0110 = -10. Isso se chama complemento 2’, é exatamente isso q a maquina faz! :wink:

:arrow: URUBUserve q para voltar o -10 = (… 1111 1111 0110) para 10 (… 0000 0000 1010) é só fazer a mesma coisa, ou seja, inverter os bits e somar 1 (um) novamente! :roll:

:arrow: Sens, uma dúvida: qdo a máquina soma dois número, ela faz um AND ou um OR, ou nenhum :lol: ?

fabiostb, o exatamente isso que a maquina faz cara! coloquei aquele exemplo para mostrar o pq q é assim…

quanto a soma não é apenas um AND, OR, ou XOR que a maquina faz, na verdade um circuito somador é resultado de uma expressão lógica um pouco maior,(já fiz isso na facul, mas não lembro de cabeça.)

valeu …

[]s victor

S

No final das contas:
~x = -(x+1)

Exemplo:
x = 5 —> ~x = -6 e vice versa.[/code]

Criado 18 de março de 2005
Ultima resposta 18 de mar. de 2005
Respostas 7
Participantes 5