package study.exam;
import java.util.*;
public class Ex14 {
int inputNum; // 입력받는 정수
int divNum; // 나누어지는 수
int qNum; // 나눈 몫
ArrayList<Integer> arr; // 나눈 나머지가 저장될 배열
int[] array; // 비트연산용 배열
public static void main(String[] args) {
new Ex14().execute();
}
// 실행
public void execute() {
getInputNum(); // 정수 입력받기
// getBinary(); // 2진수로 배열에 저장하기
//
// printResult(); // 결과 출력하기
useBit();
}
// 결과 출력 메서드
public void printResult() {
System.out.print("10진수 "+inputNum+"의 2진수는 ");
Collections.reverse(arr); // 배열을 역순으로 정렬
for(Integer i : arr) {
System.out.print(i);
}
System.out.println("(2) 입니다.");
}
// 2진수 구하여 배열에 저장
public void getBinary() {
arr = new ArrayList<>(); // 배열 생성
while(divNum>0) { // 나눌수 없을때까지 반복
qNum = divNum / 2; // 나눈 몫 저장
arr.add(divNum % 2); // 나눈 나머지 저장
divNum = qNum; // 나눌 수를 몫으로 설정
}
}
// 정수 입력 받는 메서드
public void getInputNum() {
Scanner scan = new Scanner(System.in);
while(true) {
System.out.print("정수 입력 : ");
try {
inputNum = Integer.parseInt(scan.next());
if(inputNum>1000)
throw new Exception();
else
break;
} catch (Exception e) {
System.out.println("1000이하의 정수만 입력하시오.");
}
}
divNum = inputNum; // 나누어지는 수에 입력받은 수 세팅
}//end getInputNum()
///////////////////////////////////////////////////////////////////////
// 비트연산자 이용 풀이
public void useBit() {
int temp = 0; // 입력받은값 임시 저장
array = new int[32]; // int 크기에 맞는 배열 생성
for(int i=31; i>=0; i--) {
temp = inputNum >> i;
// System.out.println((31-i)+")temp: "+temp);
array[31-i] = temp & 1;
// System.out.println((31-i)+")array :"+array[31-i]);
}
boolean start = false;
System.out.print("10진수 "+inputNum+"의 2진수는 ");
for(int i=0; i<array.length; i++) {
if(array[i]==1)
start = true; // 1을 만나면 출력 준비
if(start) // 출력 시작
System.out.print(array[i]);
}
System.out.println("(2) 입니다.");
}
}