문제2017--[기초-비트단위논리연산][PY]비트단위논리연산 NOT

2017: [기초-비트단위논리연산][PY]비트단위논리연산 NOT

[만든사람 : 2023 박정호,박혜미,백승관,안득하,유현호,이경미,이민혁,임건웅,임수빈,임의정,임태현,한진우,황윤정]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

정보시간에 비트를 배운 금비는 아직 0과 1이 익숙하지 않다.  

비트와 익숙해지기 위해 금비는 어떠한 십진수를 이진수로 바꾼 후 0을 1로, 1을 0으로 바꾸는 놀이를 진행하였다. 

금비가 0을 1로, 1을 0으로 바꾸었을 때 나오는 이진수를 십진수로 다시 변환하여 출력해보자.

(예를 들어  숫자 2는 이진수로 000000 000000 000000 000010이고 0과 1을 반대로 바꾸면 111111 111111 111111 111101로 -3이 된다.)


입력 설명

정수 n을 입력한다.
(-2147483648 <= n <= +2147483647) 

출력 설명

정수 n에 비트논리연산자 NOT을 적용한 숫자를 출력한다.

입력 예시 Copy

2

출력 예시 Copy

-3

도움

비트단위(bitwise) 연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift) 가 있다.

예를 들어 1이 입력되었을 때 저장되는 1을 32비트 2진수로 표현하면
00000000 00000000 00000000 00000001 이고,
~1은 11111111 11111111 11111111 11111110 가 되는데 이는 -2를 의미한다.

예시
a = 1
print(~a) #-2가 출력된다.

참고
컴퓨터에 저장되는 모든 데이터들은 2진수 형태로 바뀌어 저장된다.
0과 1로만 구성되는 비트단위들로 변환되어 저장되는데,
양의 정수는 2진수 형태로 바뀌어 저장되고, 음의 정수는 "2의 보수 표현"방법으로 저장된다.

양의 정수 5를 32비트로 저장하면, 

5의 2진수 형태인 101이 32비트로 만들어져
00000000 00000000 00000000 00000101
로 저장된다.(공백은 보기 편하도록 임의로 분리)

32비트 형의 정수 0은
00000000 00000000 00000000 00000000

그리고 -1은 0에서 1을 더 빼고 32비트만 표시하는 형태로
11111111 11111111 11111111 11111111 로 저장된다.

-2는 -1에서 1을 더 빼면 된다.
11111111 11111111 11111111 11111110 로 저장된다.

이러한 내용을 간단히 표현하면, 정수 n이라고 할 때,

~n = -n - 1
-n = ~n + 1 과 같은 관계로 표현할 수 있다.

출처: 코드업 기초 100제 > 6059번 > [기초-비트단위논리연산] 비트단위로 NOT 하여 출력하기(설명)(py)