Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的位移位_Python_Bit Manipulation_Byte Shifting - Fatal编程技术网

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的幂相乘,尾数(可能指数会改变)。谢谢你的信息!谢谢你的信息!