본문 바로가기
Java

[Java] 비트연산

by happyhelen 2021. 7. 29.

컴퓨터는 이진수로 소통하기 때문에 이진수 연산(비트연산)을 이해할 필요가 있다

자연수 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