• ベストアンサー

このような計算はできるでしょうか?

todo36の回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.5

bitシフトもどきの n = n \ 2 を使う。 最上位bitをマスクする必要がある。 Function BitCnt(ByVal n As Long) As Long Dim Cnt As Long If (n And &H80000000) Then Cnt = 1 n = (n And &H7FFFFFFF) End If Do While n Cnt = Cnt + (n And 1) n = n \ 2 Loop BitCnt = Cnt End Function # int型で扱うよりはlong型のほうが早いかも

関連するQ&A

  • ビット演算子について

    あるプログラムの中で下記のようなif文の記述を見かけました。 どういう計算をしてif文の判定を行っているのでしょうか。 (1)256を2進数に変換して → 100000000 (2)0x00000004を2進数に変換して → 100 (3)100000000 & 100 のビットAND演算を行う そもそも(3)で100000000 と 100 では桁数が違うけどどうやって両者でビット演算するので しょうか。100を 000000100というように0を補完して計算すればよいのでしょうか。 その場合、100000000 & 000000100 → 000000000(2進数) → 0(10進数) となりif文の中には入らないことになると思います。 if(256 & 0x00000004 != 0)

  • 2進数データのビット演算

    vb.netにて 0と1からなる2進数で記録した2つの値をビット演算したいと思っております。 Convert.ToInt32("1111101000", 2) などを使って、一度数値に変換して演算すれば、計算可能なことはわかったのですが、計算に利用したいデータが2進数で1000桁ほどあります。桁数が多い場合、Convert.ToInt32ではエラーが出て実行できません。 無数に長い2進数のデータをビット演算するにはどうすればよろしいでしょうか。 ご存知の方、ご教授よろしくお願いいたします。

  • 2進数の計算について

    2進数の計算について分からない問題があるのでお願いします。 (1) 2進5ビットの数値で,01001をバイアス表示とみるとき,10進数ではいくつか (2) 10進数の4を2進5ビットで表す.バイアス表示を用いると,どのように表されるか. できるだけ詳しい回答くれるとありがたいです。

  • 3進展開による有限体上での累乗計算の方法

    僕はペアリング暗号システムを作るために現在有限体上(標数3^97)の楕円曲線の計算プログラムを作成しています。その過程ででてくる数字で、a^((3^97+1)/4)という数字が出てきます。この指数を2進展開してdouble and add法を使って計算していたのですが、この方法だと少し計算速度が遅いのです。 そこで(3^97+1)/4という数字を3進数に直して演算を行えば高速化ができると思いました(標数が3の倍数になるから)が、その計算方法がわかりません。 double and add法のような形での計算方法が知りたいです。知っている方がいたら、是非教えてください。

  • 桁区切り数値の計算

    PHP+MYSQLで 演算子を使って計算をしたいのですが、データーベースから 数値を取り出したときに3桁以上の数値が計算できません。 <?php if($products_teika > 0.0000) { $pacent = round( 100-($products_price / $products_teika) * 100, 0); }else{ $pacent = "-"; } ?> <?php echo $pacent; ?>%OFF! という計算をさせ、割引率を表示させたいのですが 3桁以上になるとうまく計算できません。 このような場合、桁区切りの数値を計算させる方法が あるのでしょうか? ご存知の方ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • エクセル2002の計算式についてですが、

    エクセル2002の計算式についてですが、 例えば下記のような条件で計算式を作りたいのですが、 D5:D17まで空欄だった場合、D18も空欄 D5:D17まで1箇所以上のセルに数値の入力があった場合、 D18に、D5:D17の加算数値を求めたいのですが、 どのような計算式にすればよろしいでしょうか? IF、AND関数を組み合わせれば下記のように一応は出来ますが、 =IF(AND(D5="",D6="",D7="",D8="",D9="",D10="",D11="",D12="",D13="",D14="",D15="",D16="",D17=""),"",SUM(D5:D17)) 仮に、D5:D3000のように範囲が広い場合、 IF、AND関数ではかなりしんどいですが何か良い方法がありますでしょうか?

  • 多倍長演算における実行時間と計算量の差

    数学の論文において数値実験が必要だったため, 多倍長演算をC++で実行したところ,計算量とのギャップが生じました. その原因をコンピュータに詳しい方にアドバイスを頂きたいと思って質問させていただきました. 具体的には,n,m を同ビット として 以下の二つの演算を考えます. 演算(1) n * m 演算(2) n^2 % m (n^2は先に計算しておき,% (mod)の演算のみ) -------------------------------------------------- ■計算量評価 大雑把に(1)と(2)の計算量を比較すると (1) lg n * lg m = (lg n)^2 (2) (2*lg n - lg m) * lg m = (lg n)^2 となるので,(1) と (2)はほぼ同じ計算量となります. -------------------------------------------------- しかしながら,実際に計算をしてみると, n,m が 1000bit ほどまでは,ほぼ同じ計算時間なのですが, 2000bit, 4000bit ,..., と数を大きくしていくと,大きくしただけ (2) の速度が遅くなります. 具体的な実験結果は画像で添付いたします. 画像 (http://puu.sh/6iBQf.png) (1) と (2)の実行時間のギャップは何処から生じたものなのか,何かわかるかたがいらっしゃいましたら教えていただけたら嬉しいです. よろしくお願い致します. 予想:  コンピュータの知識があまりないですが,自分なりの予想では,(2)のn^2という数が大きすぎるため,演算においてメモリ間とのデータのやり取りで何かのオーバーヘッドが生じているのではないかと予想していますが,確証がもてません.

  • 計算結果のみ 0 を表示する方法を教えて下さい。

    計算結果のみ 0 を表示する方法を教えて下さい。 D4に数値が入った場合、D5に13万円未満は0%・13万円以上は1%・14万円以上は2%・尚且下3桁は切り捨てというように次の計算式を設定しています。 ROUNDDOWN(IF(D4<130000,D4*0%,IF(AND(D4>=130000,D4<140000),D4*1%,IF(AND(D4>=140000,D4<180000),D4*2%,))),-3) ゼロ値は表示しないとしていますが、D4に数値が入りD5の計算結果が0であった場合は0を表示したいのです。 D4に数値が入るまではD5は非表示になりD5に数値が入ると0表示になるように設定するにはどうすればいいのでしょうか?

  • フォートランプログラムの計算負荷について

    今、フォートランで数値計算をしています。 プログラムを書き換えて走らせたところ、計算速度が非常に遅くなりました。 考えられるのは、IF文を多く使うようにしたこと、サブルーチンの呼び出し回数をふやしたなどが考えられるのですが。IF文はそれほど、計算負荷の大きいものなのでしょうか。 お願いいたします。

  • if(wp & MK_ LBUTTON)

    case WM_MOUSEMOVE:   if(wp & MK_ LBUTTON) {   x = LOWORD(lp);   y = HIWORD(lp); } if(wp & MK_ LBUTTON)  の wp & MK_ LBUTTON ですが何をやってるんでしょうか? WPARAMと、MK_ LBUTTONの、 ビット演算、AND演算してると思うのですが 具体的どんな」ビット計算が行われているんでしょうか? 教えてください。