Wednesday, April 18, 2007
Python 파이썬] signed int를 unsigned형 정수로 변환 캐스팅 함수
Python의 기본적인 정수형은 int인데 이것은 signed 즉 부호 있는 정수이고, 0x7FFFFFFF 를 초과하는 숫자는 자동으로 long형으로 변환됩니다. (파이썬의 long형은 C나 자바와 달리, 무한대의 정수를 표현할 수 있습니다.) 파이썬에는 unsigned형 int는 없습니다.
그런데 C언어에서 가령, -1을 unsigned형 정수로 표현하면 4294967295 가 됩니다.
파이썬에서, -1을 4294967295 로 표현하려면, 비트 연산을 사용하여 변환해 주어야 합니다.
아래의 unsigned32() 라는 함수를 사용하면, signed int 를 unsigned int 로 바꿀 수 있습니다. 이 경우 자동으로 long형으로 변환됩니다. 그래서 실은 signed long 에 해당합니다.
unsigned int 로 캐스팅
파일명: example.py
실용적인 예제: ▶▶ Python 파이썬] 파일의 CRC32 값 구하기: File CRC 계산 소스
참고: ▶▶ C 언어] signed int 를, unsigned int 로 상호 변환, 캐스팅
그런데 C언어에서 가령, -1을 unsigned형 정수로 표현하면 4294967295 가 됩니다.
파이썬에서, -1을 4294967295 로 표현하려면, 비트 연산을 사용하여 변환해 주어야 합니다.
아래의 unsigned32() 라는 함수를 사용하면, signed int 를 unsigned int 로 바꿀 수 있습니다. 이 경우 자동으로 long형으로 변환됩니다. 그래서 실은 signed long 에 해당합니다.
unsigned int 로 캐스팅
파일명: example.py
#!/usr/bin/python
# -*- coding: cp949 -*-
# 32비트 unsigned 형으로 변환하는 함수 정의
def unsigned32(n):
return n & 0xFFFFFFFFL
# 변환 테스트 시작
print unsigned32(-1) # 4294967295
print unsigned32(-2) # 4294967294
print unsigned32(1) # 1
print unsigned32(0) # 0
print unsigned32(0xFFFFFFFF) # 4294967295 (부호없는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF) # 2147483647 (부호있는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF - 1) # 2147483646
print unsigned32(0x7FFFFFFF + 1) # 2147483648
i = 0x7FFFFFFF
print type(i) # <type 'int'>
# 어떤 경우든, Bigint형 정수인 long형으로 반환됨
i = unsigned32(1)
print type(i) # <type 'long'>
i = unsigned32(0x7FFFFFFF + 1)
print type(i) # <type 'long'>
# -*- coding: cp949 -*-
# 32비트 unsigned 형으로 변환하는 함수 정의
def unsigned32(n):
return n & 0xFFFFFFFFL
# 변환 테스트 시작
print unsigned32(-1) # 4294967295
print unsigned32(-2) # 4294967294
print unsigned32(1) # 1
print unsigned32(0) # 0
print unsigned32(0xFFFFFFFF) # 4294967295 (부호없는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF) # 2147483647 (부호있는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF - 1) # 2147483646
print unsigned32(0x7FFFFFFF + 1) # 2147483648
i = 0x7FFFFFFF
print type(i) # <type 'int'>
# 어떤 경우든, Bigint형 정수인 long형으로 반환됨
i = unsigned32(1)
print type(i) # <type 'long'>
i = unsigned32(0x7FFFFFFF + 1)
print type(i) # <type 'long'>
실용적인 예제: ▶▶ Python 파이썬] 파일의 CRC32 값 구하기: File CRC 계산 소스
참고: ▶▶ C 언어] signed int 를, unsigned int 로 상호 변환, 캐스팅
tag: python
Python | 파이썬
<< Home