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)
谢谢。
如果i是一个整数,
i * 2**bits\nRun Code Online (Sandbox Code Playgroud)\n等于
\ni << bits\nRun Code Online (Sandbox Code Playgroud)\n举个例子 :
\n>>> 1 * 2**8\n256\n>>> 1 << 8\n256\n>>> 2 * 2**8\n512\n>>> 2 << 8\n512\nRun Code Online (Sandbox Code Playgroud)\n但<<没有为 float 定义:
>>> 1.265 << 8\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\nTypeError: unsupported operand type(s) for <<: \'float\' and \'int\'\nRun Code Online (Sandbox Code Playgroud)\n你可以想到:
\n* 2**bits\nRun Code Online (Sandbox Code Playgroud)\n作为<< bitsfloat 的扩展。:
>>> 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\nRun Code Online (Sandbox Code Playgroud)\n作为比较,n!只为非负整数定义,但\xce\x93(z)也为任何复数定义,并且与代入自然数时的阶乘函数一致。请参阅此线程。