gpt4 book ai didi

python - 将Matlab的bitget()极值转换为python

转载 作者:行者123 更新时间:2023-12-01 02:52:44 25 4
gpt4 key购买 nike

我得到了包含这样一个循环的Matlab代码:

for n = 1:2^10,
bitget(n-1,10)*2^4;
end;

我遇到的问题是 Matlab (Octave) 显然在右侧添加了填充位,如下所示:

octave:15> bitget(5,1:10)
ans =

1 0 1 0 0 0 0 0 0 0

因此:

octave:14> bitget(5,10)
ans = 0

而 python 不会添加这些位,因此会产生错误。

对于这种特殊情况,我是否相信上面的 Matlab 行 bitget(n-1,10)*2^4; 可以翻译为 python 作为 (lambda x : 1 if x == 2**9 else 0)(n)*2**4,因为在我看来,Matlab bitget(5,10) 只会产生 1,如果n 的二进制表示跨越 10 位,即本例中的 2^9?

最佳答案

我认为您误解了 Octave 的输出。让我们用不同的值尝试您的示例,以便我们了解发生了什么。

>> dec2bin(13)
ans = 1101

>> bitget(13,1:10)
ans =

1 0 1 1 0 0 0 0 0 0

如您所见,位的顺序已颠倒。在 bitget 中,位 1 是最低有效位,或 2**0,位 102**9。它不是在右侧填充,而是从大于存储值 13 所需的 4 位的数字类型读取 0 位。

现在,只要指定位为 1bitget 就会返回 1,无论其他位的状态如何。因此,bitget(n-1,10) 不仅会为 2**9 = 512 返回 1,还会为任何其他值返回 1该位已设置;在本例中,为 512..1023 范围内的任何值。 Python 函数中的相等比较不会给你这个结果,所以你需要将其更改为按位 AND:

(lambda x: 1 if x & 2**9 else 0)(n)*2**4

这里我将 == 更改为 & 并且 2**10 变为 2**9匹配第 10 位的值。

关于python - 将Matlab的bitget()极值转换为python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44557516/

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