본문 바로가기
코리아 IT아카데미/python 인터넷 강의

ddazua | 9강 연산자3 - 비트연산의 활용

by Sharon kim 2021. 9. 16.

'''
비트연산
        논리연산자

                & 논리곱
                | 논리합
                ^ 배타논리 합
        단항연산자
                ~ 논리부정
        쉬프트 연산자
                >>      A >> B A를 오른쪽으로 B만큼 비트이동
                <<      A << B A를 왼쪽으로 B만큼 비트이동

                비트가 넘어가면 잘리고, 빈 자리는 0으로 채워진다(음수는 빈 자리가 1로 채워진다)

                ex)
                1010을 왼쪽으로 1개 밀기-> 10<<1
                10100 -> 2⁴+2²->16+4 =20
            2의43210승 

                '''console결과
                10<<1 #을 입력
                20'''


r       g      b
8bit   8bit   8bit
0~255 0~255  0~255

#000 black

#f123 ->보색 : ~f123


해킹
ip         ┌이것을 알아내야함
192.168.???.11 -본서버 (알 필요 x)
-------
ㄴ대한민국이면 똑같은
0~255  0~255 0~255 0~255
8bit       8bit     8bit      8bit
a*b=0
b=0
a*?=a
?=1
            ┌10으로 가정 00001010
192.168.10.11
A    B  C  D
A,B,D에 0을 곱함
c에다가 bit로 1111...을 다 넣음
0 . 0 . 1111... . 0
A*0=0
B*0=0
C*1=00001010
D*0=0
내가아무리 앞의 8개를 알아도 뒤의 8개를 모르면 x 
그래서 비트를 오른쪽으로 >> 8칸 밀어야함 ->쉬프트 연산자 >>, <<
C>>8 enter(C를 오른쪽으로 8칸 밀어라)
      0   0   0   0    1    0    1   0   .   0   0   0   0   0   0   0   0
2의15 14  13  12  11  10   9   8   /    7   6   5   4   3   2   1   0

'''


#%% 실수의 오류
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3) # + 산술 먼저, == 관계 나중

print("%f" %0.3) # 소수점 자리 6번째짜리 까지 나옴 6자리까지만 정확, 7번째부터 부정확.

'''console결과
0.30000000000000004 # 32칸만들었는데 연산해보니 bit로 바뀌면서 넘어가서 오류 , 그래서 반올림
False 
0.300000'''


#%% 실수의 오류 해결1_비교
import math
print(math.isclose(0.1+0.2, 0.3)) # //True
# math.isclose : 아무리 정확하지 않아도 비교를 할 때는 정확하게 나온다.


#%% 실수의 오류 해결2_결과값
from decimal import Decimal
print(float(Decimal('0.1')+Decimal('0.2'))) # //0.3


#연산을 해서 결과를 정확하게 얻고 싶으면 Decimal,
#두 값을 비교할 때 정확한 비교를 위해서라면 math.isclose()