Minha tarefa é descobrir o que este programa java escrito por meu professor está fazendo, sem executá-lo. Anexei o programa todo (short) e em negrito a expressão que eu não entendo. É além do primeiro ciclo for, que eu também sou um pouco incerto sobre o que ele faz.
import java.util.*;
int intSize = Integer.SIZE / 8; char storage[] = new char[intSize]; int test = 0xffffffff,
test2 = 0;
System.out.println(String.format("0x%08x",0xFF << (3 * 8) & test));
storage[0] = (char) ((0xF << 4));
for (int i = intSize - 1 ; i > -1 ; i--)
// storage[i] = (char) ((0xFF << (i * 8)) & test);
System.out.println(String.format("0x%08x",**(((0xFF << (i * 8)) & test))));**
for (int i = 0, j = intSize-1; i < intSize ; i++, j--)
test2 &= (((int) storage[i]) << (j * 8));
System.out.println(“The Magic Word of the Day is the English word for: ”+test2);
Uma maneira útil para analisar o código está fazendo, é dividi-la em mais pequenos passos possíveis.
Primeiro, há parênteses extras que não são necessários. Tão limpo que se, alterando deste deixá:
(((0xFF << (i * 8)) & test))
a este, que é exatamente a mesma coisa:
(0xFF << (i * 8)) & test
Agora, imagine-lo dividido em etapas separadas:
int value = i * 8;
int mask = 0xFF << value;
int result = mask & test;
Então, você sabe que:
value
é um múltiplo de oitomask
é oito contíguos1
pedaços (porque 0xFF é 11111111 na base de dois), deslocado por uma contagem que é um múltiplo de oitoresult
é a aplicação de máscara para que os 32 bits 11111111111111111111111111111111 (que é a forma de base de dois 0xffffffff, que é o valor detest
)
Esperemos que, se você foi dado esta tarefa, você já entendeu o propósito do bit a bit &
operador: cada 1-bit em um conservas operando o bit correspondente no outro operando, enquanto bits 0 em qualquer operando sempre são apuradas no resultado .
Há um monte de coisas neste código que são pobres prática. Não desafiando, apenas má. Você recebeu uma tarefa que é muito mais difícil do que deveria ser, na minha opinião, com a finalidade de demonstrar conhecimento dos operadores matemáticos e bit a bit do Java.