bit를 연산하는 법에서 알아봅시다. 제 설명이 많이 부족합니다. 처음 부분만 이해하셧다면 쉽게 bit연산을 할수 있습니다.
하지만 저의 설명에 처음 부분은 존재하지 않는 것 같내요 ㅠ
bit는 컴퓨터가 사용하는 숫자로 2진수 0과 1로 나타 내는 것 입니다.
프로그램밍에서의 표현은 변수숫자를 넣을 때 0x를 써주어 16진수로써 사용합니다.
16 진수 = 0 1 2 3 4 5 6 7 8 9 A B C D E F
ex ) 0xffffffff = 1111 1111 1111 1111 1111 1111 1111 1111
0x0000000e = 0000 0000 0000 0000 0000 0000 0000 1110
1. and연산자 '&'
'&' 연산자는 다음과 같은 실행을 한다.
x y x & y
1 0 0
0 0 0
0 1 0
1 1 1
> 위의 표를 보면 알 수 있듯이 두 변수 비트에 1이 있으면 1을 출력하고, 나머지의 경우에는 0을 출력하는 연산자 입니다.
ex ) int x = 0x00000001 > 0000 0000 0000 0000 0000 0000 0000 0001
int y = 0x00000003 > 0000 0000 0000 0000 0000 0000 0000 0011
x = x & y > 0000 0000 0000 0000 0000 0000 0000 0001
2. or연산자 '|'
'|' 연산자는 다음과 같은 실행을 한다.
x y x | y
1 0 1
0 0 0
0 1 1
1 1 1
> 위의 표를 보면 알 수 있듯이 두 변수 비트에 0이 있으면 0을 출력하고, 나머지의 경우에는 1을 출력하는 연산자 입니다.
ex ) int x = 0x00000001 // 0000 0000 0000 0000 0000 0000 0000 0001
int y = 0x00000003 // 0000 0000 0000 0000 0000 0000 0000 0011
x = x | y > 0000 0000 0000 0000 0000 0000 0000 0011
3. shift 연산자 '>>','<<'
'>>'는 오른쪽으로 비트를 밀어내는 연산자 입니다.
반대로 '<<' 연산자가 존재 하며 왼쪽으로 비트를 밀어낸다.
예를 들어
x = 0x00000002 // 0000 0000 0000 0000 0000 0000 0000 0010
x = x >> 1; // 0000 0000 0000 0000 0000 0000 0000 0001
x = x << 3; // 0000 0000 0000 0000 0000 0000 0000 1000
이렇게 변화가 된다.
shift를 시켰을 때의 숫자를 10진수로 바꾸어 생각하면,
'>>' 일경우는 10진수의 숫자가 1/2가 되고, '<<'일 경우는 10진수의 숫자가 2배가 된다.
이는 컴퓨터가 2진수를 사용하기 때문에 가능 한 것이다.
하지만 저의 설명에 처음 부분은 존재하지 않는 것 같내요 ㅠ
bit는 컴퓨터가 사용하는 숫자로 2진수 0과 1로 나타 내는 것 입니다.
프로그램밍에서의 표현은 변수숫자를 넣을 때 0x를 써주어 16진수로써 사용합니다.
16 진수 = 0 1 2 3 4 5 6 7 8 9 A B C D E F
ex ) 0xffffffff = 1111 1111 1111 1111 1111 1111 1111 1111
0x0000000e = 0000 0000 0000 0000 0000 0000 0000 1110
1. and연산자 '&'
'&' 연산자는 다음과 같은 실행을 한다.
x y x & y
1 0 0
0 0 0
0 1 0
1 1 1
> 위의 표를 보면 알 수 있듯이 두 변수 비트에 1이 있으면 1을 출력하고, 나머지의 경우에는 0을 출력하는 연산자 입니다.
ex ) int x = 0x00000001 > 0000 0000 0000 0000 0000 0000 0000 0001
int y = 0x00000003 > 0000 0000 0000 0000 0000 0000 0000 0011
x = x & y > 0000 0000 0000 0000 0000 0000 0000 0001
2. or연산자 '|'
'|' 연산자는 다음과 같은 실행을 한다.
x y x | y
1 0 1
0 0 0
0 1 1
1 1 1
> 위의 표를 보면 알 수 있듯이 두 변수 비트에 0이 있으면 0을 출력하고, 나머지의 경우에는 1을 출력하는 연산자 입니다.
ex ) int x = 0x00000001 // 0000 0000 0000 0000 0000 0000 0000 0001
int y = 0x00000003 // 0000 0000 0000 0000 0000 0000 0000 0011
x = x | y > 0000 0000 0000 0000 0000 0000 0000 0011
3. shift 연산자 '>>','<<'
'>>'는 오른쪽으로 비트를 밀어내는 연산자 입니다.
반대로 '<<' 연산자가 존재 하며 왼쪽으로 비트를 밀어낸다.
예를 들어
x = 0x00000002 // 0000 0000 0000 0000 0000 0000 0000 0010
x = x >> 1; // 0000 0000 0000 0000 0000 0000 0000 0001
x = x << 3; // 0000 0000 0000 0000 0000 0000 0000 1000
이렇게 변화가 된다.
shift를 시켰을 때의 숫자를 10진수로 바꾸어 생각하면,
'>>' 일경우는 10진수의 숫자가 1/2가 되고, '<<'일 경우는 10진수의 숫자가 2배가 된다.
이는 컴퓨터가 2진수를 사용하기 때문에 가능 한 것이다.