Python で16進数を負数に変換
Python の16進数で負数を表現できず悩んだメモ。
整数型には int と long があり、
大きさは、int は符号付32bits、long は無制限となっている。
値が int で表現できない程大きいもしくは小さい時は自動的に long に変換される。
正確には、
-2147483648 〜 2147483647(sys.maxint)
の範囲を超えると long になる。
で、ここで16進数。
0xffffffff を符号付32bitsで考えると10進で-1になるが、
Python 上では、4294967295L となる。
sys.maxint を超え、long に自動変換されたため。
(0x80000000 以上の値は全て long)
16進数で負数を扱いたい時は、ctypes モジュールを使うといいっぽい。
ctypes.c_int(0xffffffff).value
で、-1 が返る。
整数型には int と long があり、
大きさは、int は符号付32bits、long は無制限となっている。
値が int で表現できない程大きいもしくは小さい時は自動的に long に変換される。
正確には、
-2147483648 〜 2147483647(sys.maxint)
の範囲を超えると long になる。
で、ここで16進数。
0xffffffff を符号付32bitsで考えると10進で-1になるが、
Python 上では、4294967295L となる。
sys.maxint を超え、long に自動変換されたため。
(0x80000000 以上の値は全て long)
16進数で負数を扱いたい時は、ctypes モジュールを使うといいっぽい。
ctypes.c_int(0xffffffff).value
で、-1 が返る。
2008-05-08(Thu) 15:55|
開発|
Python
|
0|
0


