본문 바로가기

자바

비트 연산

2진법

2진법에서 각 자리값은 2의 제곱으로 나타낸다.

예를들어 1001의 경우,

첫번째 자리의 숫자 1의 자릿값은 2의 0승(2^0) -> 1

두번째 자리의 숫자 0의 자리값은 2의 1승(2^1) -> 0

세번째 자리의 숫자 0의 자리값은 2의 2승(2^2) -> 0

네번째 자리의 숫자 1의 자리값은 2의 3승(2^3) -> 8

 

2진수 1001은

각 자리의 숫자와 자릿값을 곱하고, 이것들을 더한 값이 10진수가 된다.

1001

= 1 * 1 + 0 * 2 + 0 * 4 + 1 * 8

= 9

 

tip) 이때, 2^0(1)이 최하위 비트. 2^3(8)은 최상위비트.

 

결론:

10진수 5456의 5의 자릿값이 10^3(1000)이듯

N자리 2진수의 자리값은 2^0부터 2^(N-1)까지이다.

 

비트 연산자

 

1. <<

명시된 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산)

ex:

package bitset;

/**
 * << 연산자 예제
 */
public class BitOper {

	public static void main(String[] args) {
		
		// 모든 비트가 한 비트씩 왼쪽으로 이동할 때마다 그 값은 2배씩 증가한다
		
		// << 기준 왼쪽숫자를 오른쪽숫자만큼 왼쪽으로 이동!
		System.out.println(1 << 2);	// 0001을 왼쪽으로 2칸?
		System.out.println(2 << 1);	// 0010을 왼쪽으로 1칸?
		System.out.println(2 << 2);	
		
		System.out.println(1 << 20);
		System.out.println(20 << 1);
	}
}

 

2. ~ 연산자

package bitset;

/**
 * ~ 연산자
 * @author dev-jones
 *
 */
public class BitOperNot {

	public static void main(String[] args) {
		
		// ~
		// 비트를 1이면 0으로, 0이면 1로 반전시킴.
		// 비트 NOT 연산
		// 1의 보수
		
		System.out.println(~8);
		
		/*
		결과가  -9인 이유
		~연산을 하면 비트가 반전되지만
		반전된 비트는 왼쪽끝이 1이기때문에 컴퓨터는 음수로 인식
		컴퓨터는 음수인 해당비트를 10진수로 출력하기 위해 2의 보수작업 진행
		2의 보수는 컴퓨터가 음수를 표현하기 위한 방법.
		
		==============
		2의 보수작업
		
			1. 반전되서 나온 결과 비트0111에 1의 보수를 취한다.(비트반전)
			0111 -> 1000
			
			2. 1의 보수를 취한 결과 값에 2의 보수를 취한다.(+1 더하기)
			1000 + 0001 -> 1001
		
			3. 결과 9앞에 -부호를 붙여줘.
			
			※ 따라서 결과는 -9
		*/
	}
}

'자바' 카테고리의 다른 글

스트림 api  (0) 2020.11.22
파일 업로드  (0) 2020.11.22
문자열 붙이기  (0) 2020.11.18
리플렉션, Class 생성, Method 실행  (0) 2020.11.16
날짜 포맷 설정(SimpleDateFormat)  (0) 2020.11.16