① 메소드로 구현하기
십진수 9를 이진수로 바꾸는 과정은 아래의 그림과 같다.
바꾸고자하는 십진수 값을 2로 나누어, 몫이 1이 될때까지 모든 나머지값을 거꾸로 출력한다.
이 과정을 그대로 코드로 구현하면 다음과 같다.
/*
n : 비트 자리 수
(예: 9=1001(2)일때, 비트 자리 수 n=5 : 01001(2))
num : 십진수
*/
public static int[] makeBinary(int n, int num){
int[] result = new int[n];
int i = n-1;
while(num != 1){
result[i--] = num%2;
num /= 2;
}
result[i] = num; //가장 마지막 num/2값
return result;
}
② Integer.toBinaryString() 이용하기
십진수를 이진수로 변환해주는 Integer클래스의 함수를 이용하면,
①의 구현을 하지 않고 바로 원하는 이진수 값을 얻을 수 있다.
- return값 : (이진수 꼴의) String
예) 9 = 1001(2) -> Integer.toBinaryString(9) = "1001" 의 스트링으로 리턴한다.
- n자리 비트 수로 변환 시 : String.format() 이용
예) 9=1001(2) -> 5자리 비트 수로 변환 원할 때,
String str = String.format("%05s", Integer.toBinaryString(9));
☞ "%05s" : 5자리 비트 수로, 빈 자리는 0으로 채워서 변환해주세요. (s:길이/너비 의미)
"%"+n+"s" 꼴로 사용 가능!
int num = 9;
String binaryNum_str = Integer.toBinaryString(num);
//binaryNum_str = "1001" (String)
int binaryNum_int = Integer.parseInt(binaryNum_str,2);
//binaryNum_int = 1001 (int)
String binaryNum_5bits = String.format("%05d", binaryNum_str);
// == String.format("%05d", Integer.toBinaryString(num));
//binaryNum_5bits = "01001" (String)
비트 연산 : &, |, ^, ~, <<, >>
AND(&), OR(|), XOR(^), NOT(~), SHIFT(<<,>>) 는 비트 연산에 사용된다.
십진수 9와 3을 AND 연산을 하고 싶다면 어떻게 해야할까?
십진수 9와 3을 이진수로 변환한 후, 비트 자리별로 연산을 진행해야 할까?
결론부터 이야기하면 아니다. 십진수 형태로 비트 연산이 가능하다!
System.out.print(9&3); //출력 결과: 1
/*
9 = 1001(2)
3 = 0011(2)
9&3 = 0001(2)
*/
위에서 보는 것처럼 9&3은 알아서 이진수로 변환해 계산하고, 결과는 십진수로 리턴이 됨을 알 수 있다.
'공부내용 > JAVA' 카테고리의 다른 글
String ⇔ Char Array (0) | 2020.12.11 |
---|---|
Comparable interface (객체 정렬) (0) | 2020.12.04 |
날짜 차이 구하기 (Calendar) (0) | 2020.11.15 |