O que faz isso afinal? byte << ou <<< ou &

5 respostas
squall926

Ola!
Depois de tanto ver pessoas usando, e continuar sem entender o uso, venho pedir a ajudar dos amigos do GUJ.

quant_byte = byte<<0x08;

Deslocamento de byte… como isso funciona?

5 Respostas

T

Pegue um número, converta-o para binário, e copie os zeros e uns para uma quadrinho como este:

(Vou dar o exemplo com [telefone removido], que é o número 0xCAFEBABE em hexadecimal, ou 11001010111111101011101010111110 em binário.)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1|1|0|0|1|0|1|0|1|1|1|1|1|1|1|0|1|0|1|1|1|0|1|0|1|0|1|1|1|1|1|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Shiftar alguma coisa 8 posições, conforme você mostrou, é ir deslocando os bits (0 e 1) que mostrei no quadrinho para a esquerda, e completar à direita com zeros. Se sobrar alguma coisa, os bits vão sendo jogados fora. A seguir, você converte de novo de binário para decimal.

squall926

Entendido! mas ainda não vi uma finalidade nisso!
De qualquer forma obrigado pela resposta!

renatoes

Boa tarde,

Complementando a ótima resposta do Thingol, segue dois links que me ajudaram muito a entender as operações bitwise:
http://www.vipan.com/htdocs/bitwisehelp.html
http://www.gamedev.net/reference/articles/article1563.asp (este trata sobre o assunto em C/C++)

O uso do & é na verificação de máscaras (por exemplo, se você quer testar se uma determinada cor possui a cor vermelha, poderia proceder da seguinte forma):

int RED_MASK = 0x00FF0000; if((myColor & RED_MASK) == RED_MASK) { //... }

EDIT: Respondendo sua pergunta acima, ao fazer o deslocamento de bits utilizando o <<, por exemplo, vc multiplica o valor por 2 vezes o número do deslocamento:
Exemplo:

int a = 10; a = a << 2; //a vale 40 = 10 * 2 * 2

Dê uma olhada nos links que posto aí em cima :stuck_out_tongue:

Abraços
(5 edits para aparecer o bendito “a” na área code :shock: )

squall926

ótimo site… tô olhando
muito obrigado!!!

Maniezo

Ainda bem que não cai mais isso no SCJP 5…

Criado 12 de fevereiro de 2008
Ultima resposta 12 de fev. de 2008
Respostas 5
Participantes 4