gpt4 book ai didi

python - 从可变位宽扩展的符号

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:14 25 4
gpt4 key购买 nike

C++代码如下:

#include <iostream>
#include<limits.h>
using namespace std;

void sign_extending(int x,unsigned b)
{
int r; // resulting sign-extended number
int const m = CHAR_BIT * sizeof(x) - b;
r = (x << m) >> m;
cout << r;
}

void Run()
{
unsigned b = 5; // number of bits representing the number in x
int x = 29; // sign extend this b-bit number to r
sign_extending(x,b);
}

Result : -3

结果数将是一个有符号数,其位数存储在 b 中。我正在尝试在 python 中复制这段代码:

from ctypes import *
import os

def sign_extending(x, b):
m = c_int(os.sysconf('SC_CHAR_BIT') * sizeof(c_int(x)) - b)
r = c_int((x << m.value) >> m.value) # Resulting sign-extended number
return r.value

b = c_int(5) # number of bits representing the number in x
x = c_int(29) # sign extend this b-bit number to r
r = sign_extending(x.value, b.value)
print r

Result : 29

我无法像从 C++ 中的输出中那样获取符号扩展数。我想知道我当前代码(python)中的错误或问题,以及使用此技术解决问题的可能方法。

最佳答案

你可以使用

def sign_extending(x, b):
if x&(1<<(b-1)): # is the highest bit (sign) set? (x>>(b-1)) would be faster
return x-(1<<b) # 2s complement
return x

关于python - 从可变位宽扩展的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38803320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com