비트 (2진수) : 0 또는 1
논리연산자
| &(논리 곱) | AND연산자 : 두 비트가 모두 1 이면 1 |
| |(논리 합) | OR연산자 : 둘 중 하나라도 1 이면 1 |
| ^(배타논리 합) | XOR연산자 : 두 비트가 서로 다르면 1 |
| ~(논리부정) | NOT(보색으로 변경할 때 사용됨) |
A = 10
B= 11
우선,10진수를 2진수로 변경
A = 1010 , B = 1011
A&B = 1010
A|B =1011
A^B =0001
단항연산자
| ~ | NOT : 0을 1로, 1을 0으로 바꿔줌 |
컴퓨터는 덧셈밖에 못하므로 맨 왼쪽 비트(최상위 비트)는 부호비트로 사용됨. 0이면 양수, 1이면 음수
~a = -a -1
쉬프트연산자
| >> | A>>B : A를 오른쪽으로 B만큼 비트 이동 |
| << | A<<B : A를 왼쪽으로 B만큼 비트 이동 |
비트가 넘어가면 잘리고, 빈자리는 0으로 채워짐(음수는 빈자리가 1로 채워짐)
10<< 1
10을 2진수로 바꾸면 1010
1010을 왼쪽으로 1 비트씩 이동하면 10100 이 되므로 20이 된다.
실수의 오류
print(0.1+0.2)를 하면 0.3보다 큰 수가 출력되는걸 볼 수 있다.
print(0.1+0.2 == 0.3)를 하면 False가 출력됨
연산결과가 비트로 바뀌면서 오류가 발생함!!
==> 연산결과가 비트의 정해진 칸 수를 넘어가면서 반올림 발생
%f : 소수점 6번째자리까지만 정확해서 실수가 소수점6번째까지 표시
실수의 오류 해결
#근사값을 구해주고 비교할 때
import math
print(math.isclose(0.1+0.2,0.3))
# 0.1+0.2의 근사값을 구해주고 0.3과 비교
#True 출력됨
#연산을 통해 결과값을 정확하게 나타낼 때
from decimal import Decimal
print(float(Decimal('0.1') + Decimal('0.2'))
#0.3이 출력된다.