일시 : 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의 보수는 반대의 부호가 된다.
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비트의 레지스터가 있다.
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
---|---|---|---|---|---|---|---|
** |
** 부분의 비트를 기존의 값이 무엇이었든 상관없이 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 이다.
0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
---|---|---|---|---|---|---|---|
** | ** |
앞의 두개(**)의 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);
'2017 멀티캠퍼스 > Python' 카테고리의 다른 글
[Python] #6 파이썬 반복문 while과 제어문 (0) | 2018.01.03 |
---|---|
[Python] #5 파이썬 반복문 For (0) | 2018.01.03 |
[Python] #4 파이썬 조건문 if (0) | 2018.01.02 |
[Python] #2 파이썬 변수 (0) | 2018.01.01 |
[Python] #1 파이썬과 간단 예제 (0) | 2018.01.01 |