1046: [기초-비트시프트 연산] 정수 1개 입력받아 2배 곱해 출력하기(설명)(py)
[만든사람 : 전현석, 최문성(확인), 이준용(확인), 김지혜(그림) (2020)]
문제 설명
본 문제는 python 의 빠른 기초 학습을 위해 설계된 문제로서 python 코드 제출을 기준으로 설명되어 있습니다.
------
정수 1개를 입력받아
2배 곱한 값을 출력해 보자.
참고
*2 를 계산해 출력해도 되지만,
2진수로 저장된 값을 왼쪽이나 오른쪽으로 1비트씩 이동시켜,
2배로 곱하거나, 2로 나눈 효과를 만들어주는 비트시프트 연산자 <<, >> 를 사용할 수도 있다.
컴퓨터 내부에는 모든 데이터들이 2진수 형태로 저장되기 때문에,
그 값들을 왼쪽이나 오른쪽으로 1비트 만큼 밀어 이동시키면,
원래 값의 2배로 커지거나 1/2로 작아지게 된다.
왼쪽으로(<<) 비트 시프트가 되어 오른쪽에 새로운 비트가 추가될 때에는
무조건 0이 추가되고, 왼쪽으로 자릿수를 넘어가는 비트는 삭제된다.
오른쪽으로(>>) 비트 시프트가 되어 왼쪽에 새로운 비트가 추가될 때에는
가장 왼쪽에 있던 비트가 0인 경우에는 0이 추가되고,
가장 왼쪽에 있던 비트가 1인 경우에는 1이 추가된다.
그리고 가장 오른쪽에 있던 비트는 삭제된다.
예시
...
n = 10
print(n<<1) #10을 2배 한 값인 20이 출력된다.
print(n>>1) #10을 반으로 나눈 값인 5가 출력된다.
print(n<<2) #10을 4배 한 값인 40이 출력된다.
print(n>>2) #10을 4로 나눈 값인 2가 출력된다.
...
정수 10의 2진수 표현은 000 ... 1010 이다.
10<<1 을 계산하면 000 ... 10100 이 된다. 이 값은 10진수로 20이다.
10>>1 을 계산하면 000 ... 101 이 된다. 이 값은 10진수로 5이다.
n = 10 과 같이 키보드로 입력받지 않고 직접 작성해 넣은 코드에서,
숫자로 시작하는 단어(식별자, identifier)는 자동으로 수로 인식된다.
n = 10 에서 10은 10진수 정숫값으로 인식된다.
변수 n 에 문자열을 저장하고 싶다면, n = "10" 또는 n = '10' 으로 작성해 넣으면 되고,
n = 10.0 으로 작성해 넣으면 자동으로 실숫값으로 저장된다.
n = 0o10 으로 작성해 넣으면 8진수(octal) 10으로 인식되어 10진수 8이 저장되고,
n = 0xf 나 n = 0XF 으로 작성해 넣으면 16진수(hexadecimal) F로 인식되어 10진수 15로 저장된다.
** python 에서 실숫값에 대한 비트시프트 연산은 허용되지 않고 오류가 발생한다.
(실숫값도 컴퓨터 내부적으로는 2진수 형태로 저장되고 비트시프트 처리가 될 수 있지만, python 에서는 허용하지 않는다.)
------
정수 1개를 입력받아
2배 곱한 값을 출력해 보자.
*2 를 계산해 출력해도 되지만,
2진수로 저장된 값을 왼쪽이나 오른쪽으로 1비트씩 이동시켜,
2배로 곱하거나, 2로 나눈 효과를 만들어주는 비트시프트 연산자 <<, >> 를 사용할 수도 있다.
컴퓨터 내부에는 모든 데이터들이 2진수 형태로 저장되기 때문에,
그 값들을 왼쪽이나 오른쪽으로 1비트 만큼 밀어 이동시키면,
원래 값의 2배로 커지거나 1/2로 작아지게 된다.
왼쪽으로(<<) 비트 시프트가 되어 오른쪽에 새로운 비트가 추가될 때에는
무조건 0이 추가되고, 왼쪽으로 자릿수를 넘어가는 비트는 삭제된다.
오른쪽으로(>>) 비트 시프트가 되어 왼쪽에 새로운 비트가 추가될 때에는
가장 왼쪽에 있던 비트가 0인 경우에는 0이 추가되고,
가장 왼쪽에 있던 비트가 1인 경우에는 1이 추가된다.
그리고 가장 오른쪽에 있던 비트는 삭제된다.
예시
...
n = 10
print(n<<1) #10을 2배 한 값인 20이 출력된다.
print(n>>1) #10을 반으로 나눈 값인 5가 출력된다.
print(n<<2) #10을 4배 한 값인 40이 출력된다.
print(n>>2) #10을 4로 나눈 값인 2가 출력된다.
...
정수 10의 2진수 표현은 000 ... 1010 이다.
10<<1 을 계산하면 000 ... 10100 이 된다. 이 값은 10진수로 20이다.
10>>1 을 계산하면 000 ... 101 이 된다. 이 값은 10진수로 5이다.
n = 10 과 같이 키보드로 입력받지 않고 직접 작성해 넣은 코드에서,
숫자로 시작하는 단어(식별자, identifier)는 자동으로 수로 인식된다.
n = 10 에서 10은 10진수 정숫값으로 인식된다.
변수 n 에 문자열을 저장하고 싶다면, n = "10" 또는 n = '10' 으로 작성해 넣으면 되고,
n = 0o10 으로 작성해 넣으면 8진수(octal) 10으로 인식되어 10진수 8이 저장되고,
n = 0xf 나 n = 0XF 으로 작성해 넣으면 16진수(hexadecimal) F로 인식되어 10진수 15로 저장된다.
** python 에서 실숫값에 대한 비트시프트 연산은 허용되지 않고 오류가 발생한다.
(실숫값도 컴퓨터 내부적으로는 2진수 형태로 저장되고 비트시프트 처리가 될 수 있지만, python 에서는 허용하지 않는다.)
입력 설명
정수 1개가 입력된다.
(단, -1073741824 ~ 1073741823)
(단, -1073741824 ~ 1073741823)
출력 설명
2배 곱한 값을 출력한다.
입력 예시 Copy
1024
출력 예시 Copy
2048
도움
기초100제(py) v0.85 : 정보교사 커뮤니티 @컴퓨터과학사랑(CSL)
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.