2017-06-22 6 views
0

各サーフェスは12ビットの2の補数を表す2の補数変換を行う必要があります。私は、次のコードを持つ配列を変換するためにPythonのTwo's Complementアルゴリズム

:しかし

def twos_comp(val, bits): 
"""compute the 2's complement of int value val""" 
if (val & (1 << (bits - 1))) != 0: # if sign bit is set e.g., 8bit: 128-255 
    val = val - (1 << bits)  # compute negative value 
return val 

、私はなりません取得していた結果:私は、次の機能をオンラインで見つけ

for x in np.nditer(array, op_flags=['readwrite']): 
    x[...] = twos_comp(x, 12) 

どんな意味でも。私のコードは間違っていますか?

私が試した他の事がある:

 for x in np.nditer(array, op_flags=['readwrite']): 
      if x > 2047: 
       x[...] = (2047 - x) 
      else: 
       x[...] = x 

が、再びデータが「右」は見えません。助言がありますか?

おかげで、私は私が expected surface

のように見える表面を期待していしかし、代わりに私はこのresultant surface(も存在するように見える表面を得ていることを意味し、「正しくない」と

z軸の数字はそれほど大きい理由を説明する80の乗数)

+3

あなたが「右を見ていない」「どんな意味がない」とはどういう意味ですか。いくつかのサンプルを共有して返されるものと**返されるべきもの**を表示できますか?要するに、[mcve]は助けになるでしょう:) – MSeifert

答えて

0

使用この単純な機能は

def twos_comp(val): 
    return 0b111111111111 - val  # 12 ones 

あなたは

val = 0b111100001111 
print("{:012b}".format(twos_comp(val))) 

でそれをテストして、あなたが持ってます

それはあなたが望んでいない場合は、この機能を使用する代わりに

def twos_comp(val): 
    return 0b1000000000000 - val  # 1 with 12 zeroes 
+0

ありがとう、私はこれを持っていると思います。なぜ私は私が期待しているものの否定的なものを得ているのか? – jlt199

0

いくつかの相対的な内容は、ここでは、すでに用意されています

Python - Most effective way to implement two's complement?

、ここで:

Two's Complement in Python

+0

ありがとう、私はそれらのほとんどを読んできました。それが私の既存のコードを入手した場所です。 'np.nditer(array、op_flags = ['readwrite'])'私はそれが何をすると思いますか?これは配列のすべての要素をループし、ループ内のコードの結果で値を更新します – jlt199

関連する問題