指数を求めるには?

解決


2tom  2010-04-14 20:42:25  No: 71550

VCではなく、C/C++の話になってしまうと思いますが、
質問させてください。

ある値の2の指数を求めるにはどうすればいいのでしょうか?

入力:出力
  1:0
  2:1
  4:2
  8:3
16:4
32:5

と、ある値から2^xの「x」の値を求めたいのです。
※「^」はビット排他的論理和(XOR)ではありません。

何かいい方法をご存じでしたらご教授お願います。


tetrapod  2010-04-14 21:30:33  No: 71551

-1 とか 0 とか 3 とか 5 6 7 とかに対してどんな値が出ればいいの?

浮動小数点数演算してよいなら log2(x)
log2(x) がない処理系なら log(x) の底の変換公式から求めればいい。


仲澤@失業者  2010-04-14 21:50:53  No: 71552

対象数値を2進数で表現したとき、1の立っている
最下位ビットからの位置(インデックス)が指数部になります。
どのビットも立っていなかったら指数は0です。


2tom  2010-04-14 22:32:28  No: 71553

仲澤様の方法で実現することが出来ました。
アドバイス頂きありがとうございました。


tetrapod  2010-04-14 23:08:13  No: 71554

どのビットも立っていなかったら指数は0ではなくて未定義だけどね


仲澤@失業者  2010-04-20 20:24:29  No: 71555

>どのビットも立っていなかったら指数は0ではなくて未定義だけどね

その通りですね。間違えてしまいました・・・orz。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加