1189: [기초-비트시프트 연산] 정수 1개 입력받아 2배 곱해 출력하기(설명)(C)
[만든사람 : 전현석, 정종광(채점데이터 및 확인), 배준호(확인), 최웅선(확인), 김지혜(그림) (2013)]
문제 설명
본 문제는 C 의 빠른 기초 학습을 위해 설계된 문제로서 C 코드 제출을 기준으로 설명되어 있습니다.
------
정수 1개를 입력받아 2배 곱해 출력해보자.
예시
...
int a=10;
printf("%d", a<<1); //10을 2배 한 값인 20 이 출력된다.
printf("%d", a>>1); //10을 반으로 나눈 값인 5 가 출력된다.
printf("%d", a<<2); //10을 4배 한 값인 40 이 출력된다.
printf("%d", a>>2); //10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.
...
참고
*2 를 계산해 출력해도 되지만,
2진수로 저장된 값을 왼쪽이나 오른쪽으로 1비트씩 이동시켜,
2 배로 곱하거나, 2 로 나눈 효과를 만들어주는 비트 시프트 연산자 <<, >> 를 사용할 수도 있다.
컴퓨터 내부에는 모든 데이터들이 2진수 형태로 저장되기 때문에,
그 값들을 왼쪽이나 오른쪽으로 1 비트 만큼 밀어 이동시키면,
원래 값의 2 배로 커지거나 1/2 로 작아지게 된다.
왼쪽으로(<<) 비트 시프트가 되어 오른쪽에 새로운 비트가 추가될 때에는
무조건 0 이 추가되고, 왼쪽으로 자릿수를 넘어가는 비트는 삭제된다.
오른쪽으로(>>) 비트 시프트가 되어 왼쪽에 새로운 비트가 추가될 때에는
가장 왼쪽에 있던 비트가 0 인 경우에는 0 이 추가되고,
가장 왼쪽에 있던 비트가 1 인 경우에는 1 이 추가 된다.
그리고 가장 오른쪽에 있던 비트는 삭제된다.
------
정수 1개를 입력받아 2배 곱해 출력해보자.
...
int a=10;
printf("%d", a<<1); //10을 2배 한 값인 20 이 출력된다.
printf("%d", a>>1); //10을 반으로 나눈 값인 5 가 출력된다.
printf("%d", a<<2); //10을 4배 한 값인 40 이 출력된다.
printf("%d", a>>2); //10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.
...
참고
*2 를 계산해 출력해도 되지만,
2진수로 저장된 값을 왼쪽이나 오른쪽으로 1비트씩 이동시켜,
2 배로 곱하거나, 2 로 나눈 효과를 만들어주는 비트 시프트 연산자 <<, >> 를 사용할 수도 있다.
컴퓨터 내부에는 모든 데이터들이 2진수 형태로 저장되기 때문에,
그 값들을 왼쪽이나 오른쪽으로 1 비트 만큼 밀어 이동시키면,
원래 값의 2 배로 커지거나 1/2 로 작아지게 된다.
왼쪽으로(<<) 비트 시프트가 되어 오른쪽에 새로운 비트가 추가될 때에는
무조건 0 이 추가되고, 왼쪽으로 자릿수를 넘어가는 비트는 삭제된다.
오른쪽으로(>>) 비트 시프트가 되어 왼쪽에 새로운 비트가 추가될 때에는
가장 왼쪽에 있던 비트가 0 인 경우에는 0 이 추가되고,
가장 왼쪽에 있던 비트가 1 인 경우에는 1 이 추가 된다.
그리고 가장 오른쪽에 있던 비트는 삭제된다.
입력 설명
정수 한 개가 입력된다.
(-1073741824 ~ 1073741823)
(-1073741824 ~ 1073741823)
출력 설명
2배 곱한 정수를 출력한다.
입력 예시 Copy
1024
출력 예시 Copy
2048
도움
기초100제(c)1 v1.5 : 정보교사 커뮤니티 @컴퓨터과학사랑(CSL)
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.