No.4ベストアンサー
- 回答日時:
ANo1です
ソースコードを書いてみました
これを参照してください
32桁分を取り出すのに、Mid関数でなく、SubStringメソッドを使用しています
以下、ソースコード
Dim strBitValue1 As String
Dim strBitValue2 As String
Dim strBitValueRes As String
' 計算を行うビットの文字列
strBitValue1 = "10000000111111111000001111111110001"
strBitValue2 = "10000000111111111000001000000110000"
Dim intVal1 As Integer
Dim intVal2 As Integer
Dim intValRes As Integer
Dim intLeng As Integer
Dim Idx As Integer
For Idx = 0 To strBitValue1.Length Step 32
' 取り出す桁数を決める
intLeng = 32
If ((strBitValue1.Length - Idx) < 32) Then
intLeng = strBitValue1.Length - Idx
End If
' 取り出した桁数を整数値に変換する
intVal1 = Convert.ToInt32(strBitValue1.Substring(Idx, intLeng), 2)
intVal2 = Convert.ToInt32(strBitValue2.Substring(Idx, intLeng), 2)
' ビット演算を行う
intValRes = intVal1 And intVal2
' 計算結果を文字列にして連結する
strBitValueRes = strBitValueRes & Convert.ToString(intValRes, 2).PadLeft(intLeng, "0")
Next
' 計算結果を表示する
Debug.WriteLine(strBitValueRes)
ソースコードまで用意していただきありがとうございました。
ソースコードを元に、1000桁の2進数を2つ用意して、その2つのビット演算を2000回、つまり、合計200万桁のビット演算を行うテストをしましたが1秒かからずに実行完了しました。
ありがとうございました。
結論的には、200万桁程度であれば、ループで1桁ずつまわしても、32桁ずつIntegerに変換してビット演算しても高速に処理できることがわかりました。
ちなみに、
32桁ごとのビット演算200万桁(1000桁の32桁区切りを2000セット):600ミリ秒。
配列数1000のboolean配列の演算2000セット:46ミリ秒。
でした。
参考まで:ループで回すときに用いる変数の型の方が結果に影響を与えていることがわかりました。
http://www.kabugraph.jp/blog/from2001/d/426
こちらは、データ型の種類により300倍から700倍ほど処理速度に差が出ました。
皆様どうもありがとうございました。
No.3
- 回答日時:
> ループでまわすよりも、何か高速に処理できる方法がありましたら
さて?
ちゃんと計測したことはありませんが・・・
高々1000回(1000桁)のループですよね?
十分高速(と言うか、たいした時間は掛からない)と思いますが・・・
下手なことをすると、「文字列」=>『高速と思われる処理で扱えるデータ型』=>「文字列」
と言う、データ型の変換部分のオーバーヘッドが馬鹿にならなくなる可能性も・・・
#「Simple Is Best!!」
どの程度、「高速化」が必要(または「高速化できたらいいな」)と考えていらっしゃるのでしょうか?
この回答への補足
ご回答ありがとうございます。
おっしゃるとおり、実験してみましたが、高速に処理できました。
実際には、1000桁の2進数データ(文字列またはバイト配列、boolean配列など、形式はまだ決めていません)を20個ほどの組み合わせる演算を100セット行う予定です。つまり、200万回ループをまわす程度の計算を考えています。
boolean配列で、200万回のループ計算実験でも1秒かかりませんでした。
実は、質問前に、アプリを組んだときに、実装方法がとんでもなく悪く180秒ほどかかっていたため、処理に時間がかかると思い込んでいました。実際には、メインの処理ではなく、データを格納したhashtableからデータを取得するルーチンが遅く、そのルーチンを200万回呼び出していたのが遅い原因でした。
No.2
- 回答日時:
> 0と1からなる2進数で記録した2つの値をビット演算したいと思っております。
> Convert.ToInt32("1111101000", 2) などを使って、
> 進数で1000桁ほどあります
「ビット演算」と言いながら、実体は文字列("0"と"1")なんでしょうか?
でしたら、単純にループで1文字ずつ取り出して、変換するとかはどうでしょう?
ANDなら「両方"1"なら"1"、その他は"0"」
ORなら「両方"0"なら"0"、その他は"1"」
等単純な条件文で済みますよね?
この回答への補足
回答ありがとうございます。
そうなんです。
私も良く考えたら、ループで回せばいいと気がつきました。
ただ、ループでまわすよりも、何か高速に処理できる方法がありましたら、教えていただければ幸いです。
No.1
- 回答日時:
Integer型や、Long型などの整数型として、計算するのは無理かと思います。
数値としては、Double型で表現は出来ると思いますが、精度は無くなりますANDやOR等のビット演算だけであれば、32桁(32bit)ごとに区切って、計算させるのが良いかと思います
32桁ごとに区切るには、Mid関数を使って32桁ごとに取り出すと良いかと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- 計算機科学 ビット計算 2 2023/04/16 14:26
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- 統計学 t値の計算方法 1 2022/11/29 18:37
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
”/”を使わずに割り算したいんで...
-
ExcelでPC(パソコン)によって...
-
除算を使わずに10で割りたい。
-
有効数字について 以前質問をし...
-
16進数 加算 減算 C言語
-
VB6.0での小数点の扱いについて
-
距離から緯度経度を求める方法
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
VBAでの割り算の余りの求め方
-
c languageで 簡単な質問があ...
-
C++の打切り誤差についてお聞き...
-
C言語プログラミングにて、arct...
-
double型からfloat型への型変換...
-
計算の丸め誤差の解消について
-
VB.net Double と...
-
VBAでミリ秒まで出力する方法
-
ExcelのINT関数の計算結果がお...
-
シンプソンの法則について
-
加算と減算で乗算と除算を表現...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
c languageで 簡単な質問があ...
-
”/”を使わずに割り算したいんで...
-
VB.net Double と...
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
ExcelでPC(パソコン)によって...
-
除算を使わずに10で割りたい。
-
EXCELの関数"STDEV(標準偏差)"...
-
floatの有効桁数
-
VBAでミリ秒まで出力する方法
-
100桁の計算ができなくて困って...
-
2進数の足し算(C言語)
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
コンピューターは指数関数をど...
-
BCD・HEX・BINについて
-
距離から緯度経度を求める方法
おすすめ情報