본문 바로가기

코드업(CodeUp)/기초 100제

[코드업/자바] 기초 100제 - 정수 1개 입력받아 2배 곱해 출력하기

1047 : [기초-비트시프트연산] 정수 1개 입력받아 2배 곱해 출력하기

 

정수 1개를 입력받아 2배 곱해 출력해보자.

참고
*2 의 값을 출력해도 되지만,
정수를 2배로 곱하거나 나누어 계산해 주는 비트단위시프트연산자 <<, >>를 이용한다.

2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로
지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 반으로 줄어드는데,

왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고,

오른쪽 비트시프트(>>)가 될 때에는
왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가된다.

범위(32비트)를 넘어서 이동되는 비트는 삭제된다.

예시
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 가 출력된다.

 

입력

정수 한 개가 입력된다.
단, -1073741824 ~ +1073741823

출력

2배 곱한 정수를 출력한다.


입력 예시

1024

출력 예시

2048


오늘은 새로운 개념을 배운다. 바로 비트단위시프트 연산자이다. 위에서도 설명에 있듯이

2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로
지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 반으로 줄어든다.

 

예를 들면

10<<1은 왼쪽으로 밀어내면서 오른쪽에 0이 추가되는 것이므로 2배인 20이 출력된다.

10>>1은 오른쪽으로 밀어내면서 왼쪽에 0이나 1(음의 정수인 경우) 추가되는 것이므로 절반인 5가 출력된다.

 

그러면 비트단위시프트 연산자(<<, >>)를 이용하여 2배 곱한 정수를 출력해보자.

 

package excercise;
import java.util.*;

public class codeup {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		
		System.out.println(num<<1);
	}
}

 

728x90
반응형