Operador Shift

uma básica que eu não sabia :oops: :

Assumindo x como byte contendo 10110001, qual será o sinal de X após a operação x>>2?

:microwave:

isso? 00101100

Nops … :shock:

o sinal de x será negativo

pois quando fazemos signed right shift o sinal se mantem, ou seja, os campos da esquerda são preenchidos com o ultimo bit, no caso 1 (que é negativo)

vc viu essa questão do game do javaranch?

será negativo ?

fica assim:
10101100 (negativo)

x >>> 2 fica:
00101100 (positivo)

for (int i=0; i < 32; i++)
x = x >> 1;

fica: 11111111 11111111 11111111 11111111

Lá mesmo … eu nem tinha me tocado na diferença entre >> (signed shift) e >>> (unsigned shift)

Acho que vou fazer esse joguinho todo dia, tem uns detalhes que nem da pra prestar atenção no dia a dia.

[]s

no começo eu fazia esses joguinhos todos os dias
até que se vc fazer muito chega uma hora que vc quase decora todas… ae nem vira, hehehe

o operador >> sempre retornara algo de mesmo sinal

Eu sei que a pergunta é bem básica, mas não estou acostumado a trabalhar com bits.
então:
como vc chegou a conclusao que este nº é negativo?

Um número binário é negativo se o seu primeiro bit for 1.

então:
5 == 00000101
e
-5 == 10000101

???

exatamente

se você fizer 5 >> 2 = 00000001
se você fizer -5 >> 2 = 00100001

nao,
-5 = 11111111111111111111111111111011

o primeiro bit é sempre o sinal, 0 = positivo … 1 = negativo

mas, em binario,
-1 = 1111 1111 1111 1111 1111 1111

pq??? pq esse numero + 1, faz tudo voltar a 0000 0000 0000 0000 0000 0000 :slight_smile:

logo o menor numero negativo de um inteiro eh:
1000 0000 0000 0000 0000 0000

beleza:
-5 = 11111011 --> se ele for 1
onde 0 vale 1 e 1 vale 0
logo,
5 = 00000101 --> aqui ele é 1 tb

caso contrario, ele é 0

seria isso?

pera ai!!! esta gerando alguma confusão aqui!!

p bit que define o sinal, é o bit da esquerda nao DA DIREITA !

1000 0000 0000 0000 0000 0001 = isso é um numero negativo
0000 0000 0000 0000 0000 0001 = mas isso é positivo[/b]

To procurando faz um tempo já algum topico sobre isso, mas acabei não achando a definição que eu queria.

Alguem sabe de algum post ou artigo que explique detalhadamente a utilização de >> e << ?

Até!