Skip to content

Latest commit

 

History

History
79 lines (51 loc) · 2.06 KB

File metadata and controls

79 lines (51 loc) · 2.06 KB

Problema

5 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

int n = -1;
Console.WriteLine(~n);

Soluções

Solução 1

-1 -> 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
    ~ -------------------------------------------------------------------------------
      0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

O output será 0 porque, em binário -1 é 1111 16x, com isto aplicamos o operador bit-a-bit ~ NOT que transforma todos os 1 em 0.

Por Sara Gama.

Solução 2

Começando: n = -1.

2's Complement:

O binário de um número negativo -a é obtido através da inversão do binário do número positivo a, ou seja ~a, e depois incrementando 1 ao valor binário obtido.

Portanto:

1 em binário fica: 01; neste caso é-nos util representar mais do que 2 bits, e embora int sejam variáveis 32 bit basta representá-la usando os primeiros 8 bits.

Logo: 1 -> 00000001, invertendo fica: 11111110

Incrementando 1 ficamos com: 11111111.

Concluímos que -1 é representado em binário como: 11111111.

Ou seja: n = 0x11111111

~ é o operador bitwise de negação, que quando aplicado inverte o valor de cada bit.

~n representa n invertido; isto é: ~n = 0x00000000.

Logo, no ecrã será mostrado: 0

Por Rafael Castro e Silva

Solução 3

Na primeira linha temos a variável n do tipo inteiro com o valor -1. Na segunda linha temos o output da negação do valor da variável n.

Primeiro convertemos o número 1 em binário. Depois faz-se o complemento para 1 e o complemento para 2. Obtendo assim o numero -1 em binário.

1 = 0001
Complemento para 1 de 0001 = 1110
complemento para 2         =   +1
---------------------------------
-1 em binário              = 1111

A negação do número binário 1111 = 0000. O programa vai imprimir 0.

Por Ana Santos