python中的位移位
我想了解以下代码。第三线在做什么python中的位移位,python,bit-manipulation,byte-shifting,Python,Bit Manipulation,Byte Shifting,我想了解以下代码。第三线在做什么 number = 1.265 bits = 8 shifted_no = 1.265 * (2** bits) 如果我检查number和shifted_no结果的二进制格式: 0011 1111 1010 0001 1110 1011 1000 0101 0100 0001 0010 0001 1110 1011 1000 0101 谢谢。这里的号码是一个。浮点具有以下结构: +-+--------+-----------------------+ |s|
number = 1.265
bits = 8
shifted_no = 1.265 * (2** bits)
如果我检查number和shifted_no结果的二进制格式:
0011 1111 1010 0001 1110 1011 1000 0101
0100 0001 0010 0001 1110 1011 1000 0101
谢谢。这里的
号码是一个。浮点具有以下结构:
+-+--------+-----------------------+
|s| exp | mantisse |
+-+--------+-----------------------+
1 8 23
这表示一个值(-1)1-2×s×2e-127×1.m,其中s为s
,e为exp
的值,m
为尾数的值
每个组件下面的位数。如果将一个浮点数乘以二的幂,则指数部分将以该幂递增。所以,因为你用8乘以(你的问题中可能有错误),你用3增加指数,得到
原始浮点:
+-+--------+-----------------------+
|0|01111111|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
+-+--------+-----------------------+
|0|10000010|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
最终浮点:
+-+--------+-----------------------+
|0|01111111|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
+-+--------+-----------------------+
|0|10000010|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
然而,您在这里所做的是不移动。移位意味着您将数据视为一个位序列,并将其向左或向右移动。您这样做(通常)与该序列的语义解释无关。轮班通常由
操作员来完成。这里的数字是一个数字。浮点具有以下结构:
+-+--------+-----------------------+
|s| exp | mantisse |
+-+--------+-----------------------+
1 8 23
这表示一个值(-1)1-2×s×2e-127×1.m,其中s为s
,e为exp
的值,m
为尾数的值
每个组件下面的位数。如果将一个浮点数乘以二的幂,则指数部分将以该幂递增。所以,因为你用8乘以(你的问题中可能有错误),你用3增加指数,得到
原始浮点:
+-+--------+-----------------------+
|0|01111111|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
+-+--------+-----------------------+
|0|10000010|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
最终浮点:
+-+--------+-----------------------+
|0|01111111|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
+-+--------+-----------------------+
|0|10000010|01000011110101110000101|
+-+--------+-----------------------+
1 8 23
然而,您在这里所做的是不移动。移位意味着您将数据视为一个位序列,并将其向左或向右移动。您这样做(通常)与该序列的语义解释无关。移位通常由
运算符完成。如果i
是整数
i * 2**bits
等于
i << bits
作为的扩展,如果i
是整数
i * 2**bits
等于
i << bits
作为的扩展,它是一个浮点,因此指数随8
递增。顺便问一下,你不是在这里用3移位吗?是的,你是对的。它是2**3
它是一个浮点,所以指数随8
递增。顺便问一下,你不是在这里用三移位吗?是的,你是对的。它是2**3
谢谢,它非常具有描述性。不过我有一个疑问。上述操作修改exp部件。如何修改尾数部分或签名部分?@blackbug:如果你用-1
相乘,符号位当然会互换。如果你不与一个2的幂相乘,尾数(可能指数会改变)。谢谢,这是一个很好的描述。不过我有一个疑问。上述操作修改exp部件。如何修改尾数部分或签名部分?@blackbug:如果你用-1
相乘,符号位当然会互换。如果你不与一个2的幂相乘,尾数(可能指数会改变)。谢谢你的信息!谢谢你的信息!