

Python3の２の補数表現について

16進数 list = [’35908413’,'db0bb551'] (str型)について，  
最上位ビットが１であるときに負数として扱いたいと思っています。  
出力結果として list = ['35908413','-24f44aaf'] となるようなPythonのプログラムの書き方を教えていただきたいです…


CC BY-SA 4.0
2019-01-18T11:50:07.797
52084
2019-01-19T08:59:44.580
30481
question
python python3
Python3の２の補数表現について


分かりやすく書くことをこころがけました。pythonは任意精度整数を扱うことができますので桁数を大きくしても同様のコードで処理することができるかと思います。

[code]

    def fmt(s):
        n = int(s, 16)
        if n >= 0x80000000:
            return '-%x' % (0x100000000 - n)
        else:
            return s
    
    list = ['35908413', 'db0bb551']
    list = [ fmt(elem) for elem in list ]
    print(list)
    
[/code]


CC BY-SA 4.0
2019-01-19T08:59:44.580
52114
2019-01-19T08:59:44.580
31654
52084
answer