2

次のコードを理解したいです。3行目のシフトは何をしているのですか?

number = 1.265
bits = 8
shifted_no = 1.265 * (2** bits)

number と shift_no の結果のバイナリ形式を確認すると、次のようになります。

0011 1111 1010 0001 1110 1011 1000 0101
0100 0001 0010 0001 1110 1011 1000 0101

ありがとう。

4

2 に答える 2

3

これnumber32 ビットの浮動小数点です。浮動小数点の構造は次のとおりです。

+-+--------+-----------------------+
|s|  exp   |       mantisse        |
+-+--------+-----------------------+
 1    8             23

これは値(-1) 1-2×s ×2 e-127 ×1.mを表し、 sは の値seは の値、expおよびmの値ですmantisse

各コンポーネントの下のビット数。float に 2 のべき乗を掛けると、指数部はそのべき乗でインクリメントされます。したがって、8 を掛けるので (おそらく質問に誤りがあります)、指数を 3 でインクリメントして取得します。

元の浮動小数点:

+-+--------+-----------------------+
|0|01111111|01000011110101110000101|
+-+--------+-----------------------+
 1    8             23

最終浮動小数点:

+-+--------+-----------------------+
|0|10000010|01000011110101110000101|
+-+--------+-----------------------+
 1    8             23

ただし、ここで行うことはシフトではありません。シフトとは、データを一連のビットとして見て、それらを左または右に移動することを意味します。そのシーケンスの意味解釈に関係なく、(通常は) これを行います。通常、シフトは<<and>>演算子で行われます。

于 2017-02-08T10:35:24.430 に答える