VB2008を使っています。
10進を2進(16ビット)に変換するプログラムがあったので、
それを利用して32ビット対応にしたいのですが、
以下のプログラムの☆☆の位置でオーバーフローが発生してしまします。解決法をぜひ教えてください!!
wave1は配列で、数字データが格納されています。
100
29584
12
489
:
ここで、このデータを2進(32ビット)に変換し、
wave2という新しい配列に格納したいです。
Public Class Form1
(一部省略)
Const WD As Long = 300000
Private wave1(WD) As Integer
Private wave2(WD) As Long
(一部省略)
For i = 0 To 10
dec2bit = dec(wave1(i)) ☆☆ここでオーバーフロー発生
wave2(i) = dec2bit
Next
Private Function dec(ByRef decNum0 As Integer)
Dim i As Integer
Dim ret As Long
Dim decNum As Long
Dim dec2bit As String
If decNum0 >= 0 Then
'正、0はそのままセット
decNum = decNum0
Else
'負のときは、そのビットイメージをセット(例-1なら4294967296)
decNum = 4294967296 + decNum0
End If
dec2bit = ""
'文字列を作成
For i = 1 To 32
'最上位ビット(最も左側のビット)が1か0か判定
ret = decNum And 2147483648 '2147483648は符号無しの&H80000000に相当
If ret <> 0 Then
dec2bit = dec2bit & "1"
Else
dec2bit = dec2bit & "0"
End If
'左へ1ビットシフトする
'シフト演算子
decNum = decNum << 1
'オーバーフロー防止
If decNum >= 4294967296 Then
decNum = decNum - 4294967296
End If
Next
Return dec2bit
End Function
End Class
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
'残念ながらエラーが再現できない。
正常に動作する。(試した範囲ではConvert.toStringと同じ値を返している)'以下のソースは質問文のものから多少改変している。
Option Explicit On
Option Strict On
Option Compare Binary
'Option Infer Off
Class Q4671082A
Public Shared Function dec(ByVal decNum0 As Integer) As String
Dim dec2bit As String
Dim decNum As Long
Dim ret As Long
If decNum0 >= 0 Then
'正、0はそのままセット
decNum = decNum0
Else
'負のときは、そのビットイメージをセット(例-1なら4294967296)
decNum = decNum0 + 4294967296
End If
dec2bit = ""
'文字列を作成
For i As Integer = 1 To 32
'最上位ビット(最も左側のビット)が1か0か判定
ret = decNum And 2147483648 '2147483648は符号無しの&H80000000に相当
If ret <> 0 Then
dec2bit = dec2bit & "1"
Else
dec2bit = dec2bit & "0"
End If
'左へ1ビットシフトする
'シフト演算子
decNum = decNum << 1
'オーバーフロー防止
If decNum >= 4294967296 Then
decNum = decNum - 4294967296
End If
Next
Return dec2bit
End Function
Shared Sub Main()
Dim fuga As Q4671082A
fuga = New Q4671082A()
System.Console.WriteLine(Q4671082A.dec(Integer.MaxValue))
System.Console.WriteLine(System.Convert.ToString(Integer.MaxValue,2).PadLeft(32,"0"c))
System.Console.WriteLine(Q4671082A.dec(29584))
System.Console.WriteLine(System.Convert.ToString(29584,2).PadLeft(32,"0"c))
System.Console.WriteLine(Q4671082A.dec(-29584))
System.Console.WriteLine(System.Convert.ToString(-29584,2).PadLeft(32,"0"c))
System.Console.WriteLine(Q4671082A.dec(Integer.MinValue))
System.Console.WriteLine(System.Convert.ToString(Integer.MinValue,2).PadLeft(32,"0"c))
'キーボード入力待ち
System.Console.ReadKey(True)
’質問文ではString型のものをLong型に代入しているが,これは避けたい。
'というか、そこだけは、何をやろうとしているのかさっぱり判らん。
End Sub
End Class
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Serverにおける小数部の0...
-
VB.NETで DataRow()を利用して...
-
テキストボックスのvalueとtext...
-
【Excel VBA】指定行以降をクリ...
-
【Excel VBA】先頭の「0」飛び...
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
任意フォルダから画像をすべて...
-
Excelのセルの色指定をVBAから...
-
count(*)で取得した値をJAVAの...
-
Excel VBA マクロ ある列の最終...
-
VBAでActiveDirectoryのユーザ...
-
VBA コピーして次の値まで貼り...
-
i=cells(Rows.Count, 1)とi=cel...
-
値を返さないコード パス
-
ExcelのINDEXとMATCH関数でスピ...
-
ListView 項目の選択/選択解除...
-
配列がとびとびである場合の書き方
-
Application.Matchで特定行の検索
-
数字でピラミッドを出力させる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL Serverにおける小数部の0...
-
16進数を10進数に変換する方法...
-
日付と曜日から、1週間前(7...
-
Request.QueryStringの型について
-
C言語のうるう年に関するプログ...
-
エクセルのカレンダー
-
西暦を入力して、うるう年かど...
-
和暦から西暦変換(C#)
-
ユリウス日から和暦(江戸時代...
-
うるう年を求めるプログラム
-
西暦→和暦
-
テキストボックスのvalueとtext...
-
VB.NETで DataRow()を利用して...
-
i=cells(Rows.Count, 1)とi=cel...
-
ExcelVBAを使って、値...
-
【Excel VBA】指定行以降をクリ...
-
特定のセルが空白だったら、そ...
-
count(*)で取得した値をJAVAの...
-
Accessのクエリで、replace関数...
-
VBAでActiveDirectoryのユーザ...
おすすめ情報