Hier ist ein Code in C++:Bitfeld Spezialisierung in Python
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);
}
Der Ausgang dieses Codes ist -3. Wenn ich versuche, diesen Code in Python zu reproduzieren, wird das Bitfeld von 11101 erzeugt, aber wenn die Antwort in ein int umgewandelt wird, wird die Antwort von 29 gegeben.
das Folgende Code von 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)
I ctypes Strukturen als Alternative Code, aber keine Verwendung auch verwendet:
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
Meine Frage ist, wie kann ich das Ergebnis mit wenig produzieren Arrays oder jede andere Methode, die die richtige Antwort gibt.
danke für die antwort ich werde es als richtig markieren. Auch nur aus Neugier, wie würde ich das Gleiche mit Bitarrays tun? –