반응형
http://mwultong.blogspot.com/2007/04/python-signed-int-unsigned.html
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'>
# -*- 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' 카테고리의 다른 글
파이썬에서 pytesseract를 사용하여 문자 인식 ( OCR ) 하기 (0) | 2022.05.24 |
---|---|
파이썬 10진수, 8진수, 16진수, 2진수 입력, 출력 방법 (0) | 2022.05.16 |
Python signed/unsigned 처리 (0) | 2022.05.16 |
Python Code: Sigmoid Funtion (0) | 2022.05.16 |
Install Docker (0) | 2021.05.26 |
댓글