2017-10-12 7 views
2

16進数を10進数に書き換える単純なスクリプトをPythonで書いています。32ビットの符号付きに対応しています。cmdのpythonは負の値を出力しません

data = [data.rstrip('\n') for data in open('dlzkyHEAD.txt')] 

for value in data: 
    print(value, end=' -> ') 
    x= int(value,16) 
    print(x) if x<2**31 else x-2**32 

すべてが働いていたPythonシェルでの作業中に、しかし、私は一つのファイルにそれらを書き、それが負の値を印刷する習慣cmdをウィンドウ内で実行。

Pythonシェル出力:

8049008 -> 134516744 
80490c0 -> 134516928 
80490d0 -> 134516944 
80490d8 -> 134516952 
8049d84 -> 134520196 
8049d88 -> 134520200 
8049da4 -> 134520228 
c -> 12 
ffffefe8 -> -4120 
ffffffe0 -> -32 
ffffffe4 -> -28 
ffffffe8 -> -24 
ffffffec -> -20 
fffffff0 -> -16 
fffffff4 -> -12 
fffffffc -> -4 

CMD出力:我々(@ cricket_007のおかげで、コメントで指摘したよう

8049d88 -> 134520200 
8049da4 -> 134520228 
c -> 12 
ffffefe8 -> ffffffe0 -> ffffffe4 -> ffffffe8 -> ffffffec -> fffffff0 -> fffffff4 -> fffffffc -> 
+0

どのようにそれを実行していますか?あなたは「Windowsで実行されたcmd」という意味ですか?これは、 "pythonシェルでの作業"とは対照的に、 –

+0

です。これは次のような意味です: C:¥Users¥User_Name¥AppData¥Local¥Programs¥Python¥Python36-32¥python.exe script.py – KnucklePunch

+1

'print(x x <2 ** 31 else else-2 ** 32) '? –

答えて

1

ここで、この行のみ表示しますX < 2の場合** 31:

print(x) if x<2**31 else x-2**32 

あまりにも実行された場合、他のあなたは、印刷に興味がある:

print(x if x<2**31 else x-2**32) 
print(x) if x<2**31 else print(x-2**32) 

それとも

if x<2**31: 
    print(x) 
else: 
    print(x-2**32) 
+0

はい、あなたは正しいです、それはPythonシェルが正常にそれを印刷したばかりです。ヘルプのThx。 – KnucklePunch

関連する問題