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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB2008で西暦を和暦に変換...
-
プログラミング
-
ユリウス日から和暦(江戸時代...
-
Windows formアプリで データグ...
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
-
VBAでセルをクリックする回...
-
ハッシュテーブル(連想配列)が...
-
Excelのセルの色指定をVBAから...
-
VBからEXCELのセルの値を取得す...
-
Excelで指定した日付から過去の...
-
Accessのクエリで、replace関数...
-
特定の文字を条件に行挿入とそ...
-
【Excel】指定したセルの名前で...
-
ExcelのINDEXとMATCH関数でスピ...
-
Sub 要具ライフ() ActiveSheet....
-
VBAでActiveDirectoryのユーザ...
-
Excelで勤怠管理をしたいです。...
-
【VBA】配列に数式を仕込む方法...
-
PysimpleGUIでデータベースを作る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL Serverにおける小数部の0...
-
16進数を10進数に変換する方法...
-
36進数
-
Request.QueryStringの型について
-
C言語のうるう年に関するプログ...
-
日付と曜日から、1週間前(7...
-
うるう年を求めるプログラム
-
閏年のフローチャートについて
-
和暦から西暦変換(C#)
-
swiftで年号を
-
閏年が何個含まれるか求めるプ...
-
ユリウス日から和暦(江戸時代...
-
和暦→西暦(有効範囲を考慮)
-
プログラミング
-
エクセルのカレンダー
-
ExcelVBAを使って、値...
-
VBAでActiveDirectoryのユーザ...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
VB.NETで DataRow()を利用して...
おすすめ情報