연산자
12/10
비트 단위 연산자 : 비트 단위 별로 진행하는 연산자
&(and) | (or) ~(not) ^(xor) 연산자
00001010(2)
& 00001101
00001000 -> 8
같은 자리 있는 애들끼리 연산하는 것
00001010(2)
or 00001101
00001111 -> 15
10 -> 00001010(2)
not - 00001010 -> 11110101
not연산자는 한 데이터만 갖고 연산함
xor 비교하는 두 비트의 값이 같으면 flase를 다르면 true
00001010(2)
& 00001101
00000110
키보드 입력키, 두 개 동시에 눌렸는지 어떻게 판단?
위쪽 -> 0001 아래 -> 0010 오른쪽 -> 0100 왼쪽 -> 1000 으로 약속 해놓고,
0001
0100
------
0101 (xor연산) -> 조합키(우+상)
역으로 0101이 무슨 키와 무슨 키 누른건지 확인하고 싶으면 :
0101 가지고 하나씩 &연산해본다.
0001이면 누른 것, 0000이면 안 누른 것
#include <bitset>
int iTemp = 10;
int iSour = 13;
//bitset<몇 비트>(출력할 대상)
cout << bitset<8>(iTemp) << endl;
=> 00001010 으로 나옴
cout << bitset<8>(iTemp&iSour) << endl;
cout << (iTemp&iSour) << endl;
=> 000001010, 8 나옴 (???????????????????????????????????)
cout << bitset<8>(~iTemp) << endl;
cout << (iTemp) << endl;
=> 1111어쩌구, -11
4라는 값을 10의 보수로 보면 6 (10이 되려면 6이 필요)
컴퓨터는 음수를 표현할 수단이 없음 (0,1 바라기)
비트 단위 별로 0을 만들어서 음수를 표현
2 : 10
1 : 01 (1의 보수)
10
10
----
1[00] 2비트 넘는 1 탈락
11111111
00000001
---------- +
1[00000000] 8비트 넘는 1 탈락