5 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.
int n = -1;
Console.WriteLine(~n);
-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.
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
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