[부울 연산자]
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'