본문 바로가기
Python

signed int를 unsigned형 정수로 변환 캐스팅 함수

by YJHTPII 2022. 5. 16.
반응형

http://mwultong.blogspot.com/2007/04/python-signed-int-unsigned.html

 

Python 파이썬] signed int를 unsigned형 정수로 변환 캐스팅 함수

Python의 기본적인 정수형은 int인데 이것은 signed 즉 부호 있는 정수이고, 0x7FFFFFFF 를 초과하는 숫자는 자동으로 long형으로 변환됩니다. (파이썬의 long형은 C나 자바와 달리, 무한대의 정수를 표현

mwultong.blogspot.com

 

 

 

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

#!/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'>
반응형

댓글