AIFFEL 2021.12.28

Jinoung Kim·2021년 12월 28일

부동소수점

파이선등 대부분의 프로그래밍 언어는 숫자를 다루는 방식은 정수(integer)와 부동소수점 수(floating point number = float)로 구분하여 처리한다.

소수를 표현하는 방식은 고정소수점 수(fixed point number)와 부동소수점 수가 있다.

1.0을 32bit의 고정소수점 수로 표현하기

  • 32bit 고정소수점 표현 방식은 1bit 부호 + 16bit 정수 + 15bit 소수
  • 부호비트는 0일경우 양수, 1일경우 음수이기 때문에 0으로 표현
  • 정수부분은 1이기 때문에 이진수 16bit로 표현하면 0000000000000001으로 표현
  • 소수부분은 0이기 때문에 이진수 15bit로 표현하면 000000000000000
  • 세 파트를 합치면 00000000000000001000000000000000 이 된다.

1.0을 32bit의 부동소수점 수로 표현하기

  • 소수는 가수*2의 지수승으로 표현 가능
  • 1.0은 1∗201*2^0 : 가수는 1, 지수는 0
  • 32bit 부동소수점 표현 방식은 1bit 부호 + 8bit 지수 + 23bit 가수
  • 지수부분이 8bit이기 때문에 255까지 표현가능하고 127부터 양의 지수 126까지는 음의지수를 표현
  • 부호bit는 0
  • 지수bit는 +, -를 구분하는 bias값 127이 양의 0승을 의미하므로 01111111
  • 소수부분은 0이기 때문에 00000000000000000000000으로 표현
  • 세파트를 합치면 00111111100000000000000000000000 이 된다

메모이제이션(memoization)

프로그래밍에서 중간 계산 값을 저장해놓고, 반복적으로 다시 계산하는 대신 저장된 값을 먼저 확인하여 사용하는 방식으로, 계산 시간을 줄이는 프로그래밍 기법이다.

피보나치 함수 예제

memory = {1: 1, 2: 1}

def fibonacci(n):
if n in memory:
number = memory[n] #저장된 값이 있는지 확인
else:
number = fibonacci(n-1) + fibonacci(n-2) #재귀적 호출
memory[n] = number #다시 계산되어지는 부분을 저장
return number

print(fibonacci(10)) #55

print(memory) # {1: 1, 2: 1, 3: 2, 4: 3, 5: 5, 6: 8, 7: 13, 8: 21, 9: 34, 10: 55}

논리연산자

C언어에서 사용하는 &&, ||, ~ 논리연산자가 Python에서는 and, or , not으로 써야 한다는 것이 아직 익숙하지 않았는데 오늘 나온 퀴즈로 확실히 기억에 남을 듯 싶다.

그리고 기본적인 것인데 정의되지 않은 변수를 논리연산자에 사용해도 안된다.

비트연산자

Python에서 &와 |는 비트연산자로 사용한다.

print(1 & 0) → 0

print(1 | 0) → 1

비교연산자

==, != 를 숫자와 문자열비교에 사용할 수 있다.

is, is not은 객체를 비교할 때 사용한다. 값을 비교할 때는 사용하지 않는 것이 좋다.

1 == 1.0 은 True 이지만 1 is 1.0은 False이다.

시퀀스 자료형의 공통 기능

  • 값 in 시퀀스객체             # 시퀀스 객체에 특정 값이 있는지 확인

  • 값 not in 시퀀스객체         # 시퀀스 객체에 특정 값이 없는지 확인

  • 시퀀스객체1 + 시퀀스객체2    # 시퀀스 객체를 서로 연결하여 새 시퀀스 객체를 만듦

  • 시퀀스객체 * 정수            # 시퀀스 객체를 특정 횟수만큼 반복하여 새 시퀀스 객체를 만듦

  • 정수 * 시퀀스객체            # 시퀀스 객체를 특정 횟수만큼 반복하여 새 시퀀스 객체를 만듦

  • len(시퀀스객체)              # 시퀀스 객체의 요소 개수(길이) 구하기

  • 시퀀스객체[인덱스]           # 시퀀스 객체의 요소에 접근

  • 시퀀스객체[0]                # 시퀀스 객체의 인덱스는 0부터 시작하므로 첫 번째 요소

  • 시퀀스객체[-음수]            # 인덱스를 음수로 지정하면 뒤에서부터 요소에 접근, -1은 뒤에서 첫 번째

  • 시퀀스객체[인덱스] = 값      # 시퀀스 객체의 요소에 값 저장

  • del 시퀀스객체[인덱스]       # 시퀀스 객체의 요소를 삭제

0개의 댓글