백준 14889,1194번을 풀면서 비트연산으로 다양한 알고리즘을 구현할 수 있다는것을 알게 되었다.
비트연산자에 대해 알아본다.
컴퓨터는 2진수를 기반으로 데이터를 저장하고, 연산한다.
2진수는 0과 1로 표현되는 수로, int number = 95를 저장했다면 컴퓨터에는 다음과 같이 저장된다.
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
한 숫자는 데이터를 표현하는 단위로 비트라고 불리고, 비트가 8개 모이면 1byte가 된다.
*java에서 int는 4byte로 32bit를 가진다.
시프트연산자
n<<i
대상 필드의 값(n)을 2진 비트로 바꾼 후, 좌측으로 i만큼 이동
오른쪽 남는 비트는 0으로 채움
n<<i 연산은 산술적으로 n * 2^i와 같다.
n>>i
대상 필드의 값(n)을 2진 비트로 바꾼 후, 우측으로 i만큼 이동
비어있는 왼쪽 비트는 부호와 같은 값으로 채운다
산술적으로 n / 2^i와 같다.
비트연산
&(and) : 양쪽모두 1일때 결과 1
|(or) : 둘중 하나가 1일때 결과 1
^(exclusive): 서로 다를 때 결과 1
~(not): 0은 1로 1은 0으로
'이것저것 알게된 것' 카테고리의 다른 글
2차원배열 특정값으로 채우기 (0) | 2019.08.02 |
---|---|
char형 연산 (0) | 2019.07.20 |
필드와 변수의 차이,선언위치,초기화 (0) | 2019.07.16 |
Scanner와 BufferedReader (0) | 2019.06.19 |
향상된 for문 (0) | 2019.06.07 |