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 |