2017 멀티캠퍼스/Python

[Python] #3 파이썬의 연산자

꿈꾸는어린이 2018. 1. 1. 23:08

//

일시 : 2017.12.29 11:00 am ~ 16 :00pm

내용 : chap 4 연산자에 대해 배움

work1 코딩 아직 못 품, 16:00pm 에 조퇴.

//

파이썬의 연산자

  • 산술 연산자설명
    /나누기소수점까지 계산
    //나누기(몫)소수점을 버리고 대입
    %나머지 값
    **제곱

    문자열 -> 숫자로 타입캐스팅. int() 또는 float() 함수 이용

  • 숫자 -> 문자열로 변환 str(a)

  • 대입 연산자 a+=3 은 a = a+3 과 동일

  • 관계 연산자 == , != , > , <

    논리 연산자설명사용 예
    and둘 다 참이어야 참(a>100) and (a<200)
    or둘 중 하나만 참이어도 참(a==100) or (a==200)
    not참이면 거짓, 거짓이면 참not(a<100)
  • 파이썬은 숫자도 참과 거짓으로 구분. 0은 거짓, 그 외의 값은 모두 참

  • 비트 연산자 : 정수나 문자를 2진수로 변환한 비트로 연산을 수행

  • 비트 연산자설명의미
    &AND둘 다 1이면 1
    |OR둘 중 하나만 1이면 1
    ^XOR(배타적 논리합)둘이 같으면 0, 다르면 1
    ~비트 부정1은 0, 0은 1로 변경
  • 파이썬에서 10 and 7 은 7이므로 참(0 이외의 값은 모두 참이므로)
  • but 비트 연산자에서 10 & 7 은 2라는 결과가 나옴
  • 0은 False, 1은 True


  • 비트 부정(~) 연산자. 0000을 비트 부정하면 1111 -> 반전된 값 '1의 보수'

  • 1의 보수에 1을 더한 값 -> 2의 보수 ( - 붙여줌)

  • 입력한 값의 2의 보수는 반대의 부호가 된다.

12 = 1100 + ㅁ = 0000 이 되어야함, ㅁ는 12의 2의 보수인 0100(-12) 이다. 계산 결과 10000에서 앞의 비트는 버림.
  • a = 12이면 ~a = -13 (앞의 비트가 0이면 양수, 1이면 음수)


EX. 123 & 456 의 결과는 72

456 -> 1 1 1 0 0 1 0 0 0 123 -> 0 0 1 0 0 1 0 0 0

​ 0 0 1 0 0 1 0 0 0 => 72



시프트 연산자

  • 왼쪽 시프트 연산자(<<) : 비트를 왼쪽으로 shift

  • 오른쪽 시프트 연산자(>>) : 비트를 오른쪽으로 shift

  • 양수는 0, 음수는 1이 채워짐

  • 왼쪽으로 shift 할 때마다 을 곱한 효과.

  • 오른쪽으로 shift 할 때마다 으로 나눈 효과.




수업예제

- 비트 연산자를 이용한 수업시간에 들은 예제. 당시 잘 이해를 못 하고 대충 필기로 적어왔는데 다시 봐도 모르겠다. 추측한대로 적어봄

[첫번째]

8비트의 레지스터가 있다.

10101010
**

** 부분의 비트를 기존의 값이 무엇이었든 상관없이 0으로 바꾸고 싶다.

위의 비트를 a라 했을 때 a = 0xAA라는 값이다.

**의 비트 값을 0으로 바꾸어 주기 위해 비트 1000을 추가하여 비트 부정 연산을 한다.

1을 뒤에서 3번째에 추가하기 위해 shift 연산을 사용하여 1<<3을 한 후 비트 부정을 한다. ~(1<<3)

비트 부정을 했기 때문에 ~(1<<3)은 0이다. 기존의 값이 1이든, 0이든 &연산을 이용하면 무조건 0이 될 수 밖에 없다.

따라서 a & ~(1<<3) 이 답이다.

[두번째]

a = 0x3D 이다.

2진수로 나타내면 0011 1101 이다.

00111101
****

앞의 두개(**)의 0비트를 1비트로 바꾸어 주고 싶다.

이진수 비트 11은 십진수로 3 . 맨 앞으로 오기 위해 shift 연산을 하여 3 << 6

0011 1101 과 1100 0000 을 OR연산을 이용하면 앞의 두 비트를 모두 1로 채울 수 있다.

따라서 답은 a | (3 << 6)







실습

105p

  ##변수 선언
##입력받은 값을 모두 지페로 교환하고 지폐의 개수는 최소화
money, m50000, m10000, m5000, m1000 = 0, 0, 0, 0, 0

money = int(input("지폐로 교환한 돈은 얼마? "))

m50000 = money // 50000
money %= 50000

m10000 = money // 10000
money %= 10000

m5000 = money // 5000
money %= 5000

m1000 = money //1000
money %= 1000

print("오만원짜리 ==> %d 장\n" % m50000)
print("만원짜리 ==> %d 장\n" % m10000)
print("오천원짜리 ==> %d 장\n" % m5000)
print("천원짜리 ==> %d 장\n" % m1000)
print("지페로 바꾸지 못한 돈 ==> %d원\n" % money)

118p

  
## 윤년 계산 프로그램
## 윤년은 4의 배수에 해당하지만 100의 배수에 해당하는 해는 제외. 400의 배수는 윤년 포함

year = 0

year = int(input("연도를 입력하세요 : "))

if(((year % 4 == 0 ) and (year % 100 != 0)) or (year % 400 == 0)) :
   print("%d 년은 윤년입니다." % year);
else :
   print("%d 년은 윤년이 아닙니다." % year);