python 中的位移位

bla*_*bug 2 python bit-manipulation byte-shifting

我想理解下面的代码。第三条线正在做什么转变?

number = 1.265
bits = 8
shifted_no = 1.265 * (2** bits)
Run Code Online (Sandbox Code Playgroud)

如果我检查 number 和shifted_no 结果的二进制格式:

0011 1111 1010 0001 1110 1011 1000 0101
0100 0001 0010 0001 1110 1011 1000 0101
Run Code Online (Sandbox Code Playgroud)

谢谢。

Eri*_*nil 5

如果i是一个整数,

\n
i * 2**bits\n
Run Code Online (Sandbox Code Playgroud)\n

等于

\n
i << bits\n
Run Code Online (Sandbox Code Playgroud)\n

举个例子 :

\n
>>> 1 * 2**8\n256\n>>> 1 << 8\n256\n>>> 2 * 2**8\n512\n>>> 2 << 8\n512\n
Run Code Online (Sandbox Code Playgroud)\n

<<没有为 float 定义:

\n
>>> 1.265 << 8\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nTypeError: unsupported operand type(s) for <<: \'float\' and \'int\'\n
Run Code Online (Sandbox Code Playgroud)\n

你可以想到:

\n
* 2**bits\n
Run Code Online (Sandbox Code Playgroud)\n

作为<< bitsfloat 的扩展。:

\n
>>> 1.0 * 2**8\n256.0\n>>> 1.00000000001 * 2**8\n256.00000000256\n>>> 1.265 * 2**8\n323.84\n>>> 1.99999999999 * 2**8\n511.99999999744\n>>> 2.0 * 2**8\n512.0\n
Run Code Online (Sandbox Code Playgroud)\n

作为比较,n!只为非负整数定义,但\xce\x93(z)也为任何复数定义,并且与代入自然数时的阶乘函数一致。请参阅此线程

\n