본문 바로가기

Programming

3장 수치 자료형과 연산자

출처 : 열혈강의 파이썬

posted by _cham

   

   

@정수형 상수

파이썬도 c와 마찬가지로 정수형 상수에는 10진수 8진수 16진수 상수가 있다.

print로 출력하면 10진수로 출력된다

최대 정수 값을 확인하려면 sys.maxint로 볼 수 있다.

   

@실수형 상수

실수형 상수는 다른 언어들과 마찬가지로 소수점을 포함하거나 e나 E로 지수를 포함한다. 실수형 상수는 c언어에서 double형과 동일하며 8바이트(64비트)로 표현된다.

변수들을 이렇게 한번에 여러 개를 받는것도 가능하다.

   

@롱형 상수

정수형으로 표현할 수 없는 큰 수는 자동으로 롱형 정수롤 표현된다. 롱(Long)형 상수는 정수 마지막에 L이 붙여서 표현한다. c언어의 롱형과는 다른 자료형이다. 유효 자리수는 메모리가 허용하는 한 무한대이다.

이렇게 길게 초기화하면 자동으로 맨 뒤에 L이 붙어 롱형 정수로 변환된다.

그리고 print로 출력하면 L은 출력되지 않는다.

   

파이썬의 데이터 형 정리

데이터 형

비트 수

표현 범위

수 표현

int(정수)

32비트

c의 long형과 같다

-2,147,483,548 ~

2,147,483,547

10, -34, …(10진수)

034(8진수), 0x38(16진수)

long(롱형 정수)

무제한

메모리가 허용하는 한

무제한

4L, 423450546343L(10진수),

034L(8진수), 0x38L(16진수)

float(실수)

64비트

c의 double과 같다

유효자리 15자리

약 10의 -308승 ~ +208승

4.34e+100, 3.72e-203

complex(복소수)

실수부 및 허수부

각각 64비트로 표현

유효자리 15자리

약 10의 -308승 ~ +208승

3+5j, 4j, a=complex(4,5)

실수부 a.real, 허수부 a.imag

   

   

@Decimal 자료형

컴퓨터의 부동 소수점에 의한 실수 표현은 오차를 동반한다.

정확한 계산 결과 값을 얻기를 원하면 decimal모듈을 사용할 수 있다. 하지만 계산 시간이 보다 오래 걸리는 것을 알아야 한다.

decimal모듈은 두 개의 클래스 Decimal, Context 를 제공한다. Decimal클래스로는 숫자를 표현하고, Context클래스로는 정확도나 반올림 방법 등과 같은 환경을 설정한다. 클래스들의 첫글자가 대문자임에 유의하자.

from decimal import * 이 뜻은 어떤것을 import하든 decimal 모듈을 사용하겠다는 뜻이다. 따라서 decimal모듈 안의 Decimal클래스를 사용할 때 decimal.Decimal로 사용하지 않고 바로 Decimal로 사용할 수 있는 것이다.

그리고 Decimal안에는 정수형이나 문자열이 들어가야 한다. 실수형이 들어가면 만들 수 없다. 실수로부터 Decimal인스턴스를 만들 수 없는 이유는, 실수 표현 자체가 오차를 동반하고 있을 수 있기 때문이다.

   

간단한 예제를 보자

0.00001을 십만번 더하면 1.0을 기대하겠지만 실제로는 그렇지 않다.

   

이번에는 Decimal 인스턴스를 이용해 보자

계산 결과가 정확하게 나왔다. 오차 없이 어떤 계산 걸과를 얻어야 한다면 Decimal 클래스를 사용하자. 하지만 너무 남용하는 것은 안좋다. 계산 시간이 무척 오래 걸리기 때문이다.

   

자 이제 Decimal 인스턴스에 대해서 계속 보자

Decimal 인스턴스는 일반 수치와 같이 연산이 가능하다.

   

하지만 지수승을 할 때는 정수형이어야 한다.

   

또한 정수형과의 연산은 가능하지만

실수형과는 안된다. 앞서와 같이 실수는 오차를 동반할 수 있으므로….

   

그리고 모듈 math와 cmath를 함께 사용할 수도 있다. 계산 결과는 실수가 된다.

   

또한 메쏘드를 지원하는 연산도 있다.

   

원하는 소수점 까지만 나타낼 수도 있다

rounding=ROUND_DOWN을 하면 버림을 하고 쓰지 않으면 디폴트로 반올림을 하는 것으로 보인다.

   

Decimal 인스턴스 객체를 생성하는 또 다른 방법은 튜플을 이용해서 부호, 지수부, 가수부를 별도로 지정하는 것이다.

첫 숫자 1은 부호(0-양수, 1-음수)를 나타내고 (1,4,7,5)는 가수부, -2는 소수점의 위치를 나타냄

   

decimal모듈의 Context는 Decimal연산에 대한 설정 값을 가지는 객체로 계산 정확도와 반올림 정책 등을 설정할 수 있다.

   

decimal모듈은 세 가지의 미리 설정된 Context가 있다.

   

이 Context를 이용해서 설정을 변경할 수 있다.

   

   

@파이썬 연산자

   

연산자는 c언어와 같으므로 넘어간다.

앞에서도 했지만 c와 약간 다른것만 한번 더 짚고 넘어가자

   

**는 지수승을 나타내고 /는 나눗셈, //는 몫 연산자를 나타낸다.

나눈 몫과 나머지를 함께 보고싶으면 divmod를 사용할 수 있다. divmod(5,3)을 하면 (1,2)가 나온다. 몫과 나머지.

   

@@관계 연산자

>,<,>=,<=,==,!= 과 같은 것을 관계 연산자라 한다.

   

기본적으로 c언어와 모두 같고, 이 관계 연산자를 사용하면 객체의 값을 비교하는 것이다.

만약 객체의 값이 아닌 객체 자체의 동일성을 알고 싶다면 == 를 사용하면 안되고 is 연산자를 사용한다.

   

값을 변경하여 위의 객체의 개념을 다시 잡아보자

y의 값을 변경했는데 z까지 변경된 것을 볼 수 있다. 즉, y와 z는 동일한 객체임을 알 수 있다.

   

***중요***

@논리연산자

논리 연산자도 c와 같지만 아주 중요한 것이 있어서 짚고 넘어가야 한다.

'and'나 'or'가 포함된 논리식은 식의 결과 값을 판정하는 데 최종적으로 기여한 객체의 값을 식의 값으로 리턴한다.

다시 말하면, and, or 연산자는 왼쪽부터 식을 계산하다가, 어떤 시점에서 결과가 알려지면 더 이상 계산을 하지 않고, 그 시점의 객체를 리턴한다. 리턴되는 값은 참, 거짓이 아님을 주의하자

   

@비트 단위 연산자

파이썬에도 c 처럼 비트 단위를 조작할 수 있다. 이 연산자들은 정수 자료형에만 적용된다.

연산자

설명

~

비트 반전(1의 보수)

<<,>>

왼쪽으로 이동, 오른쪽으로 이동

&

비트 단위 AND

^

비트 단위 XOR

|

비트 단위 OR

다른 것들은 모두 같고 <<과 >>만 보자

<<연산자는 비트를 왼쪽으로 지정한 숫자만큼 이동시킨다. 가장 왼쪽 비트는 버려지고 가장 오른쪽 비트는 0으로 채워진다.

>>연산자는 비트를 오른쪽으로 지정한 숫자만큼 이동시킨다. 가장 오른쪽 비트는 버려지고 가장 왼쪽 비트는 최상위 비트(MSB, Most Significant Bit)로 채워진다.

>>> a=4 #0000 0100

>>> a>>1 # 0000 0010

2

>>> a=-4 #1111 1100

>>> a>1 #1111 1110

-2

   

이렇게 해서 3장도 끝,……….

4장부터는 진짜 c랑 다른점만 하고 넘어가야겠다.

하나하나 하니까 엄청난 시간이….ㅠㅠ

   

   

'Programming' 카테고리의 다른 글

gcc 기본  (0) 2014.07.01
5장 리스트  (0) 2011.08.13
4장 문자열  (0) 2011.08.13
2장 파이썬 문과 기본 자료형  (0) 2011.08.06
1장 파이썬 시작하기  (2) 2011.08.06