Por falar em binarios

Por falar em binarios vai uma bem simples ai!
Cade as questoes pessoal?
Ta ficando meio parado aqui…

class Tests { public static void main (String[] args) { int x = -3, y = 5; System.out.println((-x == ~x + 1)+","+(-y == ~y + 1)); System.out.println((y>>1==y>>>1)+","+(x>>1==x>>>1)); } }

o que acontece?

bah… eu acho que vai dar
false, false
false, false

certo?!
lembrando que >>> altera sinal, e >> não…

nunca tinha visto isso… mas achei legal… não sei se de primeira eu ja acertei isso mas é bem provável que nao entao vou aguardar a resposta!

cya!

é jujo…
não foi de primeira!

mais tentativas?!?!
(sem executar! é claro!)

true, true
true, false

explicação:
+3 = 00000…00011
-3 = 11111…11101
-x == ~x + 1
0…011 == 0…00010 + 1 Verdadeiro

+5 = 0…00101
-5 = 1…11011
-y == ~y + 1
1…11011 == 1…11010 + 1 Verdadeiro

Esta expressão -x == ~x + 1 sempre retorna verdadeiro, para qualquer número pois compara o seu negativo com seu complemento de dois… o que é verdadeiro


y>>1 == y>>>1 Verdadeiro, pois
0…0101 >> 1 == 0…010
0…0101 >>> 1 == 0…010
São equivalentes

x>>1 == x>>>1 Falso, pois
1…101 >> 1 == 1…110
1…101 >>> 1 == 01…110

sempre insere 0 no bit + significativo
copia o bit mais significativo, assim não muda o sinal

[]s

PS: Vou fazer a prova amanha!!! Sexta feira dia 23… falta pouco!!!

…da pra fica doido escovando bit…

:arrg: