정수 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 가 출력된다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a;
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
sc.close();
System.out.printf("%d", a<<1 ); // a=1024 일시 2048 출력
}
}
정수 2개(a, b)를 입력받아 a를 2b배 곱한 값으로 출력해보자.
제한
0 <= a <= 10, 0 <= b <= 10
참고
예를 들어 1 3 이 입력되면 1을 23(8)배 하여 출력한다.
예시
int a=1, b=10;
printf("%d", a << b); //210 = 1024 가 출력된다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a,b;
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
b = sc.nextInt();
sc.close();
System.out.printf("%d", a<<b ); // << 가 기본적으로 2를 곱해주는데 2의 b승 값이 곱해진다. 예) a = 1 , b = 10; 1 * 2의 10승 = 1024 출력
}
}
'Backend > Algorithm' 카테고리의 다른 글
18. ArrayList - 문자열 내 마음대로 정렬하기 (0) | 2020.11.12 |
---|---|
13. BufferedReader, BufferedWriter, StringTokenizer - 빛 섞어 색 만들기 (0) | 2020.11.06 |
11. copyOfRange, sort - K번째 수 (0) | 2020.10.31 |
10. greedy - 체육복 (0) | 2020.10.30 |
9. charAt, boolean - 문자열 다루기 기본 (0) | 2020.10.30 |