컴퓨터는 이진수로 소통하기 때문에 이진수 연산(비트연산)을 이해할 필요가 있다
자연수 3 을 이진수로 표현하면 [1][1] 이고 2개의 공간을 사용하므로 2bit이다
컴퓨터는 1byte = 8bit 를 기준으로 사용한다
예를들어 Integer의 값의 범위는 -2^31 부터 (2^31)-1 이다
Integer은 4byte = 32bit 를 사용하고 모든 bit를 1로 채운 값은 4,294,967,295 이다
맨 앞의 32번째 자리는 부호비트로 0이면 양수, 1이면 음수를 나타내므로
음수 최솟값 : [1][1][1]...[1][1][1] // 양수 최댓값 : [0][1][1]...[1][1][1]
음수는 -2^31까지 표현이되고 양수는 2^31 -1까지 표현이 된다
다음은 비트연산자를 활용한 예제이다
public class No12_bit {
public static void main(String[] args) {
int a = 10;
int b = 14;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
// [1] & (and) 연산 : 둘다 1일 경우 1로 변환
System.out.println("10진수 :" + (a&b));
System.out.println("2진수 :"+ Integer.toBinaryString(a&b));
// [2] | (or) 연산 : 하나만 1이면 1로 변환
System.out.println("10진수 :" + (a|b));
System.out.println("2진수 :"+ Integer.toBinaryString(a|b));
// [3] ^ (XOR) 연산 : 각 자리수가 달라야 1로 변환
System.out.println("10진수 :" + (a^b));
System.out.println("2진수 :"+ Integer.toBinaryString(a^b));
// [4] ~ (NOT) 연산 : 각 자리수를 반대로 변환(0->1, 1->0)
System.out.println("10진수 :" + (~a));
System.out.println("2진수 :"+ Integer.toBinaryString(~a));
// [5] << (Shift) 연산 : 각 자리를 왼쪽으로 n칸 밀고 제일 첫째자리는 0으로 채움
System.out.println(3<<2); // 011 -> 1100
System.out.println(Integer.toBinaryString(3<<2));
// [6] >> 연산 : 각 자리를 오른쪽으로 n칸 밀면서 사라지는 자리수는 삭제
System.out.println(16>>3); // 10000 -> 00010
System.out.println(Integer.toBinaryString(16>>3));
// [7] >>> 연산 : >> 연산시 남은 공간을 항상 0으로 채워 양수만 리턴
System.out.println(-16>>>3);
System.out.println(Integer.toBinaryString(-16>>>3));
}
}
'Java' 카테고리의 다른 글
[Java] 람다식 (0) | 2021.08.01 |
---|---|
[Java] 추상클래스 (0) | 2021.07.29 |
[Java] 인터페이스 (0) | 2021.07.27 |
[Java] 내부클래스, 익명클래스 (0) | 2021.07.27 |
[Java] 상속 메소드 오버라이드, 자료형, super 클래스 (0) | 2021.07.24 |