비트연산자
비트 단위의 정보를 다룰 수 있는 연산자.
시스템 자체나 네트워크 관련된 프로그램 개발할 때 사용
특정 위치의 한 비트가 참인지 거짓인지 확인하거나
그 값을 변경할 경우에 사용함.
쉬프트연산은 늘 패딩을 동반.
원하는 비트만큼 쉬프트하고 그 데이터가
기존비트의 크기를 유지해야 한다면
유실된 비트의 수만큼 새로운 정보가 채워지는데
이것을 패딩이라 한다.
왼쪽으로 쉬프트를 통해 곱셉 연산을
오른쪽 쉬프트를 통해 나눗셈 연산을
수행한 결과를 얻을 수 있음.
AND : & (값이 모두 1일 때 참)
ex) 0x11223344 & 0xFFFF0000 : 11220000
0001 0001 0010 0010 0011 0011 0100 0100
1111 1111 1111 1111 0000 0000 0000 0000
0001 0001 0010 0010 0000 0000 0000 0000
OR : | (값이 하나라도 1이라면 참)
ex) 0x11223344 | 0xFFFF0000 : FFFF3344
0001 0001 0010 0010 0011 0011 0100 0100
1111 1111 1111 1111 0000 0000 0000 0000
1111 1111 1111 1111 0011 0011 0100 0100
XOR : ^ (값이 서로 다른 경우에 참)
ex) 0x11223344 | 0xFFFF0000 : EEDD3344
0001 0001 0010 0010 0011 0011 0100 0100
1111 1111 1111 1111 0000 0000 0000 0000
1110 1110 1101 1101 0011 0011 0100 0100
NOT : ~ (값을 반전)
ex) ~0x11223344 : EEDDCCBB
0001 0001 0010 0010 0011 0011 0100 0100
1110 1110 1101 1101 1100 1100 1011 1011
<< : 왼쪽으로 쉬프트
ex) 0x00001122 << 8 : 0x00112200
0000 0000 0000 0000 0001 0001 0010 0010
0000 0000 0001 0001 0010 0010 0000 0000
8비트를 왼쪽으로 쉬프트하고
왼쪽으로 쉬프트 된 값은 절사되고
오른쪽에 새로 값이 패딩되는데
이 값은 0으로 채워진다.
>> : 오른쪽으로 쉬프트
ex) 0x00001122 >> 8 : 0x00000011
0000 0000 0000 0000 0001 0001 0010 0010
0000 0000 0000 0000 0000 0000 0001 0001
8비트를 오른쪽으로 쉬프트하는데
원래 수가 양수이면 0, 음수였으면 1로
패딩하는 것이 왼쪽으로 쉬프트와 다른점.
-8 >> 3 을 예를 들어보면
1111 1111 1111 1111 1111 1111 1111 1000
1111 1111 1111 1111 1111 1111 1111 1111
-8을 오른쪽으로 3만큼 쉬프트 하게되면
2의 2승까지의 0의 정보가 절사되게 되고
-8은 음수이고 부호비트가 1이므로
그 부호를 유지하기 위해서
왼쪽비트부터 1로 채워지게 된다.
** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **
'프로그래밍 > C언어' 카테고리의 다른 글
단항 증감 연산자 (0) | 2018.06.28 |
---|---|
단순 대입 연산자 (0) | 2018.06.28 |
자료형, 보수와 음수표현 (0) | 2018.06.14 |
형식 문자열 입출력 함수 ( 스캔셋 ) (3) (0) | 2018.06.07 |
형식 문자열 입출력 함수 ( scanf ) (2) (0) | 2018.06.05 |