我正在编写一个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
实际上,减去1016并不能防止溢出:
考虑当GHR=1021时,下一轮它将变为2042(因为偏移)。减去1016,得到1026。。。你知道吗
不清楚你为什么选择1016号。要将一个数限制为其7个最低有效位,可以使用模(
%
)或按位AND运算符(&
):相关问题 更多 >
编程相关推荐