오늘은 첫 온라인 수업 날이고, 입실+매 교시+퇴실 출석체크를 했다.
어제 진도가 너무 빨라서 걱정했는데, 오늘은 실습문제 4개 정도 푸는걸로 마무리 했다. 휴....
그리고 실습문제로 어제 배운 내용을 더 깊이 이해할 수 있고, 각 실습문제에 여러 개념이 있어서 좋았다~
<실습 문제1> 16진수를 10진수로 만드는 프로그램
16진수를 10진수로 만드는 프로그램을 짜야하는 문제다. 추가로, 16진수의 알파벳(A~F)이 나올 수 있고, 소문자는 취급 안하기로 했다!
결과:
여기서 중요한 부분은 value = value *16 + v라는 문장이다.
이렇게 서술한 이유는 역순으로 숫자를 바꿔서 풀면 속도가 너무 느려지기 때문이다.
1의 자리부터 계산(역순)하는 대신, value = value * 16+v 라는 문장으로 계산한 예시는 다음과 같다.
ex. s = 12B인 경우,
1단계: 1
2단계: (1 * 16) + 2
3단계: ((1 * 16) + 2) * 16 + B
ex2. s = ABC인 경우,
1단계: A
2단계: (A * 16) + B
3단계: ((A * 16) + B) * 16 + C
<실습 문제2> 64비트 2진수를 출력시켜 주는 프로그램
결과:
알아야 할 부분:
1. bitwise and ( & ) 는 정보 추출 위해, bitwise or ( | )는 정보 추가 위해 사용
ex. ★ & 1 을 하면: ★가 0일땐 결과가 0, ★가 1일땐 결과가 1 이 나옴
ex. ★ | 1 을 하면: ★가 0이든 1이든 간에 결과가 1이 나옴(그래서 숫자가 0일 때 1로 바꿔줄 때 사용)
2. 0x는 16진수, 0o는 8진수, 0b는 2진수
3. 오른쪽 산술 시프트할 때, 부호가 0이면 앞에 0이 붙고, 부호가 1이면 앞에 모두 1이 붙음
ex. a=100....01 → a = a >>2 → 11100...01 (맨 앞 비트가 1이였어서, 앞에 1만 추가됨)
ex. a=000....01 → a = a >>2 → 00000...01 (맨 앞 비트가 0이였어서, 앞에 0만 추가됨)
4. 왼쪽으로 산술 시프트할 때는 맨 뒤에 0만 추가됨
5. 여기서 num1은 단순변수임!! 배열이 아님!!
6. print("1", end = "" )에서 'end = ""'를 붙인 이유는.. 파이썬의 print의 디폴트는 마지막이 \n이라서!
7. 'num1 = num << 1'에서 산술shift로 check가 아니라 num을 이동시킴
<실습 문제3> 정수형 데이터를 왼쪽으로 n-bit circular shift 시켜주는 프로그램
결과:
<실습 문제3-2> 정수형 데이터를 오른쪽으로 n-bit circular shift 시켜주는 프로그램
이 문제는 좀더 생각할게 많음.
그래서 hint는 다음과 같음
1. num가 양수일 때(맨 앞 비트가 0)
a. 마지막 비트가 0이면, 'num = num >> 1'
b. 마지막 비트가 1이면, 'num = num >> 1' 하고 맨 앞비트는 1로 만들어줘야함
(이유: 산술 shift는 num이 양수라서, 맨 앞 비트에 0이 붙으므로)
2. num가 음수일 때(맨 앞 비트가 1)
a. 마지막 비트가 1이면, 'num = num >> 1'
b. 마지막 비트가 0이면, 'num = num >> 1' 하고 맨 앞비트는 0으로 만들어줘야함
(이유: 산술 shift는 num이 음수라서, 맨 앞 비트에 0이 붙으므로)
결과:
처음엔 이렇게 짰는데.. 0x7FFFFFFFFFFFFFFF가 ~check임을 알게됨
그래서 최종 결과는..
코드: AI_Edu/Day2 at main · Heez27/AI_Edu (github.com)
<다음시간>
1. 5장(리스트), 6장(튜플과 딕셔너리) 진도를 나갈 예정
2. 보충교재 4장 추가로 나감
3. 오늘은 단순변수로 하는 실습이었지만, 내일부터는 단순변수 연산 안함!!
'개발 교육 일기' 카테고리의 다른 글
파이썬 교육 Day5(+ 두 숫자 또는 두 문자의 크기 비교, 파이썬으로 배우는 알고리즘 트레이딩 위키북스 책) (0) | 2021.03.19 |
---|---|
파이썬 교육 Day4 (+ 리스트에서 문자 제거, 역순화, 함수와 매개변수, 위치기반 매개변수, 가변 매개변수) (0) | 2021.03.18 |
파이썬 교육 Day3 (+ 리스트, 튜플, 딕셔너리, 리스트에서 a번째에서 b개를 취하는 프로그램) (0) | 2021.03.17 |
파이썬 교육 Day1 (+ 파이썬 변수, 데이터형, 문자열, 조건문, 반복문, 보수, 진법, 시프트 연산자, bitwise 연산자 등) (0) | 2021.03.15 |
국비 개발 교육 일기 0일차. 오리엔테이션 (feat. 비트교육센터) (0) | 2021.03.11 |