Ir para conteúdo
Fórum Script Brasil
  • 0

2 Peguntinhas E 1 Afirmativa


Denis Bittencourt Muniz

Pergunta

Mais uma vez eu amolando (atormentando) o Graymalkin laugh.gif

Bom queria saber:

1. O que faz o operador '~'? Eu pensei que ele trocava os bits... Por exemplo: 4, em binário 100, então ~4 seria 3, pois 4 (em bin. 100) = 3 (em bin. 011). Sacou a troca? Outro exemplo: ~2(10) seia 1(01)...

2. Tenho esse procedimento:

private void InfoSis_Load(object sender, EventArgs e)
        {
            Microsoft.VisualBasic.Devices.ComputerInfo x = new Microsoft.VisualBasic.Devices.ComputerInfo();

            try { labelOSName.ForeColor = Color.Black; labelOSName.Text = x.OSFullName; } catch { labelOSName.ForeColor = Color.Red; labelOSName.Text = "<Desconhecido>"; }
            try { labelPlat.ForeColor = Color.Black; labelPlat.Text = x.OSPlatform; } catch { labelPlat.ForeColor = Color.Red; labelPlat.Text = "<Desconhecido>"; }
            try { labelOSVer.ForeColor = Color.Black; labelOSVer.Text = x.OSVersion; } catch { labelOSVer.ForeColor = Color.Red; labelOSVer.Text = "<Desconhecido>"; }
            try { labelOSLang.ForeColor = Color.Black; labelOSLang.Text = x.InstalledUICulture.ToString(); } catch { labelOSLang.ForeColor = Color.Red; labelOSLang.Text = "<Desconhecido>"; }

        }

Depois de usar o objeto 'x', tenho que usar 'x = null;'? Pois a minha preocupação é que mesmo com o encerramento do programa, o objeto continue na memória...

3. Em um outro tópico, o Graymalkin me explicou sobre os operadores Bit Shift (>> e <<)... Avalia ae Graymalkin, vê se eu entendi bem:

4 (100 em bin.) << 1 = 8 (1000 em bin. O último zero foi adicionado porque desloquei todos os bits para a esquerda.)

4 (100 em bin.) >> 1 = 2 (10 em bin. Como 4 é 100 em bin. Ficou assim: 0100. Mas 4 só têm três casas, então pega-se as primeiras três casas de 0100 = '010' que é 10 (2 em dec.)).

Só tenho mais uma alguma pergunta sobre Bit Shift:

1. Pra que uso isso? Qual é a utilidade? Parece que isso não resolve nenhum problema...

Falows! smile.gif

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Mais uma vez eu amolando (atormentando) o Graymalkin  laugh.gif

Não atormenta não... hehehehe biggrin.gif

1. O que faz o operador '~'? Eu pensei que ele trocava os bits... Por exemplo: 4, em binário 100, então ~4 seria 3, pois 4 (em bin. 100) = 3 (em bin. 011). Sacou a troca? Outro exemplo: ~2(10) seia 1(01)...

Sim, e é isso que ele faz. Porém o retorno é complemento do valor, que vem também com um sinal oposto (negativo se era positivo e vice-versa).

2. Tenho esse procedimento:

private void InfoSis_Load(object sender, EventArgs e)
        {
            Microsoft.VisualBasic.Devices.ComputerInfo x = new Microsoft.VisualBasic.Devices.ComputerInfo();

            try { labelOSName.ForeColor = Color.Black; labelOSName.Text = x.OSFullName; } catch { labelOSName.ForeColor = Color.Red; labelOSName.Text = "<Desconhecido>"; }
            try { labelPlat.ForeColor = Color.Black; labelPlat.Text = x.OSPlatform; } catch { labelPlat.ForeColor = Color.Red; labelPlat.Text = "<Desconhecido>"; }
            try { labelOSVer.ForeColor = Color.Black; labelOSVer.Text = x.OSVersion; } catch { labelOSVer.ForeColor = Color.Red; labelOSVer.Text = "<Desconhecido>"; }
            try { labelOSLang.ForeColor = Color.Black; labelOSLang.Text = x.InstalledUICulture.ToString(); } catch { labelOSLang.ForeColor = Color.Red; labelOSLang.Text = "<Desconhecido>"; }

        }
Depois de usar o objeto 'x', tenho que usar 'x = null;'? Pois a minha preocupação é que mesmo com o encerramento do programa, o objeto continue na memória...
Não, não precisa. A .NET Framework possui um GC (Garbage Collector, do Inglês "Coletor de Lixo") que automaticamente remove da memória objetos que não possuem mais referências.
3. Em um outro tópico, o Graymalkin me explicou sobre os operadores Bit Shift (>> e <<)... Avalia ae Graymalkin, vê se eu entendi bem: 4 (100 em bin.) << 1 = 8 (1000 em bin. O último zero foi adicionado porque desloquei todos os bits para a esquerda.) 4 (100 em bin.) >> 1 = 2 (10 em bin. Como 4 é 100 em bin. Ficou assim: 0100. Mas 4 só têm três casas, então pega-se as primeiras três casas de 0100 = '010' que é 10 (2 em dec.)).
Exatamente. smile.gif
Só tenho mais uma alguma pergunta sobre Bit Shift: 1. Pra que uso isso? Qual é a utilidade? Parece que isso não resolve nenhum problema...
Boa pergunta. cool.gif Eu mesmo nunca precisei utilizá-los, mas achei alguns exemplos interessantes de utilização:
// Multiplicando por 2
MessageBox.Show((2 << 1).ToString());
MessageBox.Show((3 << 1).ToString());
MessageBox.Show((4 << 1).ToString());

// Dividindo por 2
MessageBox.Show((4 >> 1).ToString());
MessageBox.Show((6 >> 1).ToString());
MessageBox.Show((8 >> 1).ToString());

Uma busca no Google te retornará outros exemplos, como:

http://www.third-bit.com/swc/www/binary.html

http://www.gamedev.net/reference/articles/article1563.asp

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Só tenho mais uma alguma pergunta sobre Bit Shift:

1. Pra que uso isso? Qual é a utilidade? Parece que isso não resolve nenhum problema...

Quando se está programando aplicativos que exijam alta performance (como a engine física de um jogo), qualquer economia de instruções no processador é vantagem. Um exemplo bem simples é multiplicar um número por potências de dois. Compare o código assembly tradicional com o que utiliza bit shifts. É um diferença significativa. Outra aplicação comum também é mover os dados para outra ordem, dentro de um registrador da cpu. Por exemplo, do AL para o AH.

Mas enfim, isso tudo é pra programação baixo nível.

Para programas tipo controle de estoque, você nunca vai usar mesmo.. biggrin.gif

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Hum.. Ok, valeu galera! Mas pergunto: '4 << 3' é igual a 32, pois: 4(100) << 3 = 32(100*000* (3 acresentados, marcado por *)), correto? Mas e se eu quisésse: 100111 (bin.) 39(dec.).. Como faria?? Resumindo: em vez de fazer preenchimento com 0's não poderia fazer com 1's??

Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

Hum.. Ok, valeu galera! Mas pergunto: '4 << 3' é igual a 32, pois: 4(100) << 3 = 32(100*000* (3 acresentados, marcado por *)), correto? Mas e se eu quisésse: 100111 (bin.) 39(dec.).. Como faria?? Resumindo: em vez de fazer preenchimento com 0's não poderia fazer com 1's??

Que eu saiba você não pode fazer isso. Até porque o que acontece é que você *não* acrescenta os zeros com estes operadores, mas sim desloca os bits para uma direção ou outra e no caso de ficarem "espaços vazios" estes são *preenchidos* com zero. Existe uma sutil diferença aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      652k
×
×
  • Criar Novo...