将整数旋转为固定位数

2024-09-30 22:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python代码,它查看列表并基于元素将lsb左移1 并且基于条件应该在LSB处附加1或0。 最大计数应该是1023,因为它应该只有10位。如果数字超过1022,我如何构建它,将3个MSB设为零。我已经为它写了一个代码,但它给出了错误的结果。你知道吗

readData=file.readline()
LHT=[0]*1024
LPT=[1]*1024
GHR=0

while readData:
    pc,data=readData.split(' ')
    pc=pc[-3:]
    if pc in LHT:
        pc1=pc[-2:]
        pc1=int(pc1)
        if 'T' in data:
            LPT[pc1]=LPT[pc1]+1
            GHR=GHR<<1
            GHR=GHR+1
            if GHR>=1023:
                GHR=GHR-1016
            print("t",GHR)

        if 'N' in data:
            LPT[pc1]=LPT[pc1]-1
            GHR=GHR<<1
            GHR=GHR+0
            if GHR>=1023:
                GHR=GHR-1016
            print("n",GHR)
    else:
        LHT.append(pc)



    readData=file.readline()

我得到的读数是错误的

t 1
n 2
t 5
n 10
t 21
n 42
t 85
n 170
t 341
n 682
t 349
n 698
n 762
t 509
n 1018
t 1021
n 1026
t 1037
n 1058
t 1101
n 1186
t 1357
n 1698
n 2380
n 3744
n 6472
t 11929
n 22842
n 44668
t 88321
n 175626
n 350236
n 699456

我怎样才能解决这个问题请帮帮我。先谢谢你

预期输出:如果我的bin(1023)=1111111111然后我想删除像000111111这样的MSB


Tags: 代码indatareadlineif错误fileprint
1条回答
网友
1楼 · 发布于 2024-09-30 22:17:18

实际上,减去1016并不能防止溢出:

考虑当GHR=1021时,下一轮它将变为2042(因为偏移)。减去1016,得到1026。。。你知道吗

不清楚你为什么选择1016号。要将一个数限制为其7个最低有效位,可以使用模(%)或按位AND运算符(&):

if GHR > 1022:
    GHR &= 0b1111111 # only keep 7 least significant bits. 

相关问题 更多 >