[문제]
정수 1개를 입력받아 2배 곱해 출력해보자.
[input 예시]
1024
[output 예시]
2048
[나의 풀이]
n = int(input())
print(n<<1)
*2를 계산한 값을 출력해도 되지만, 이번엔 비트단위 시프트 연산자를 사용해보자.
비트단위시프트연산자? (<<, >>)
<<, >>는 정수를 2배로 곱하거나 나누어 계산해 준다.
컴퓨터 내부에는 2진수 형태로 값들이 저장되기 때문에,
2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로
지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 1/2로 줄어드는데,
왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고,
오른쪽 비트시프트(>>)가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가되고,
가장 오른쪽에 있는 1비트는 사라진다.
간단히 말해서,
왼쪽 비트시프트가 1번 있으면 2배 2번 있으면 2**2배
오른쪽 비트 시프트가 1번 있으면 1/2배 2번 있으면 1/2**2배
예시
n = 10
print(n<<1) #10을 2배 한 값인 20 이 출력된다.
print(n>>1) #10을 반으로 나눈 값인 5 가 출력된다.
print(n<<2) #10을 4배 한 값인 40 이 출력된다.
print(n>>2) #10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.
[참고] Python에서 실수 값에 대한 비트 시프트 연산은 허용되지 않음.
실수 값도 컴퓨터 내부적으로는 2진수 형태로 저장되고 비트 시프트 처리가 될 수 있지만,
python 에서는 허용하지 않아 오류가 발생한다.
'# 3. APS > CodeUp' 카테고리의 다른 글
CodeUp # Python 기초 100제_6060_비트단위로 AND 하여 출력하기_(비트단위 논리연산, 앰퍼샌드 Ampersand) (0) | 2021.07.04 |
---|---|
CodeUp # Python 기초 100제_6059_비트단위로 NOT 하여 출력하기_(비트단위 논리연산, 틸드 Tilde) (0) | 2021.07.04 |
CodeUp # Python 기초 100제_6043_실수 2개 입력받아 나눈 결과 계산하기 (0) | 2021.07.04 |
CodeUp # Python 기초 100제_6038_정수 2개 입력받아 거듭제곱 계산하기 (0) | 2021.07.04 |
CodeUp # Python 기초 100제_6023_시분초 입력받아 분만 출력하기 (0) | 2021.07.04 |