Eu estou tentando para descrever o que esta afirmação java print “(((0xFF << (i * 8)) & teste))))“significa

griffin3419:

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);
VGR:

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 oito
  • maské oito contíguos 1pedaços (porque 0xFF é 11111111 na base de dois), deslocado por uma contagem que é um múltiplo de oito
  • resulté a aplicação de máscara para que os 32 bits 11111111111111111111111111111111 (que é a forma de base de dois 0xffffffff, que é o valor de test)

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.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=318986&siteId=1
Recomendado
Clasificación