Python 抓取标签位的麻烦
我正在使用直接映射的python实现一个直接映射缓存。缓存中的每行包含4个字节。由于某种原因,我在使用位移位提取前27位(在本例中)和最后5位时遇到了问题 我不确定我在比特转移方面到底做错了什么,但我所做的一切都没有给我想要的比特。我现在正在做一种“硬编码”的解决方案,但将缓存中存储的整数转换为位字符串,并使用python的字符串索引仅获取前27位,尽管我确实想知道如何通过位移位来实现Python 抓取标签位的麻烦,python,caching,bit-shift,Python,Caching,Bit Shift,我正在使用直接映射的python实现一个直接映射缓存。缓存中的每行包含4个字节。由于某种原因,我在使用位移位提取前27位(在本例中)和最后5位时遇到了问题 我不确定我在比特转移方面到底做错了什么,但我所做的一切都没有给我想要的比特。我现在正在做一种“硬编码”的解决方案,但将缓存中存储的整数转换为位字符串,并使用python的字符串索引仅获取前27位,尽管我确实想知道如何通过位移位来实现 是我指的硬编码解决方案 如果缓存中存储的值为 0B1101010101010101000010000011
是我指的硬编码解决方案 如果缓存中存储的值为 0B1101010101010101000010000011001 我想要一个标签: 110101010101010100001000(前27位,作为标记=(行大小-索引-偏移量) 索引: 100-标签后面的下3位 和一个偏移量:
01(最后两位)-最后两位您可以通过掩蔽和移位来提取位 要获得前n位,使用的掩码为000011..(n倍)..11。只需使用
(1m)将其右移,即可生成此掩码,使位字段的lsb位于位置0
返回r&((1)您遇到了什么问题?我遇到的问题是我不确定如何通过位移位获取位。我在调用bin后使用字符串索引获取位。
def getTag(d_bytes):
b = bin(d_bytes)
b = b[2:]
return (b[0:27])
# extract n bits of x starting at position m
def getfield(x,n,m):
r=x>>m # shift it right to have lsb of bitfield at position 0
return r&((1<<n)-1) # then mask to extract n bits
lsb27=getfield(tag,27,0) # get bits x[26:0]
msb5=getfield(tag,5,27) # get bits x[31:27]