2

C++ のコードは次のとおりです。

void sign_extending(int x)
{
  int r; // resulting sign extended number goes here
  struct {signed int x:5 ;} s;
  r = s.x = x;
  cout << r; 
}

void Run()
{
  int x=29; // this 29 is -3 ( 11101 ) in 5 bits 
  // convert this from using 5 bits to a full int
  sign_extending(x);
}

このコードの出力は -3 です。このコードを Python で再現しようとすると、11101 のビット フィールドが生成されますが、答えが int に変換されると、29 の答えが与えられます。

以下はpythonのコードです:

from bitarray import *

def sign_extending(x) :
  s = bitarray(5)
  r = s = bin(x)  #resulting sign extended number goes in r
  print (int(r, 2))

x = 29 #this 29 is -3 ( 11101 ) in 5 bits. Convert this from using 5 bits to a full int
sign_extending(x)

また、代替コードとして ctypes 構造を使用しましたが、使用しませんでした:

from ctypes import *
def sign_extending(x, b):
  class s(Structure):
      _fields_ = [("x", c_int, 5)]
  r = s.x = x
  return r  #resulting sign extended number goes in r

x = 29; #this 29 is -3 ( 11101 ) in 5 bits. 
r = sign_extending(x, 5) #Convert this from using 5 bits to a full int
print r

私の質問は、ビット配列または正しい答えを与える他の方法を使用して、この結果をどのように生成するかということです。

4

2 に答える 2