[부울 연산자]

True and False
>> False

True or False
>> True

not True
>> False 

x = y = True
(x and not y) or (not x and y)
>> False

[비트 연산자]

True & False
>> False

True | False
>> True

##대응되면서 서로 다르면 true 
True ^ True
>> False

#not은 2의 보수에서 1을 뺀 값과 같다. 
# not x = -x -1  / not 1 = -1 -1
~ True
>> -2

[비트 조작 퀴즈]

bin(0b0110 + 0b0010)
>>'0b1000'

#4자리수 2개를 4자리수 곱셈 한 결과
bin(0b0011 * 0b0101)
>>'0b1111'

bin(0b1101 >> 2)
>> '0b11'

bin(0b1101 << 2)
>>'0b110100'

#둘이 다를때 ^의 결과는 1 
#1의 보수에 1을 더한거 (1의 보수는 반대값)
#not x 는 2의 보수에서 1을 뺀 결과
#이렇게 하면 원하는 값 얻을 수 없음. 앞에 1이 들어감. 
bin(0b0101 ^ ~0b1100)
>>'-0b1010'

[자릿수 제한 비트 연산] # 앞에 0 생략가능

bin(0b1100 ^ 0b1111)
>>'0b0011'

MASK = 0b1111
bin(0b0101 ^ (0b1100 ^ MASK))
>>'0b0110'

[파이썬의 진법 표현]

이진수와 십진수는 다음과 같이 각각 bin()과 int()를 사용해 서로 변환 할 수 있다.

bin(87)
>>'0b1010111'
int('0b1010111', 2)
>>87

#bin(을 사용해서 변수에 값을 할당하면 다음과 같이 str로 리턴 된다. 
a = bin(87)

#이진수를 변수에 저장하면 십진수가 된다. 
a = 0b1010111
>>87

#16진수를 표현하는 방법
hex(87)
>>'0x57'

[2의 보수]

2의 보수는 컴퓨터가 음수를 저장하기 위해 일반적으로 취하는 여러 방법 중 하나다.

#4비트로 2의 보수를 표현하기 위한 방법
MASK = 0xF
bin(1 & MASK)
>>'0b1'
bin(7 & MASK)
>>'0b111'
bin(-8 & MASK)
>>'0b1000'