Qwordについて(10進数,2進数の変換)
Posted: 2006年2月08日(水) 09:33
2つバグらしいものを発見しましたので報告します。
10進数から2進数に変化するプログラムですが,
メインプログラムで,qword宣言でinputを使用すると,入力後のデータ(ii)がゼロになってしまいます。dword宣言にするときちんと代入されます。
また,適当な10進数を2進数に変化する場合,ii=1108099398の場合きちんと計算されますが,ii=41467157163の場合計算されません。Dec2Bin関数内でデバックしたところ,data3の値がおかしいようです。
どなたかコメントお願いします。
環境:xp/sp2 + AB4.13 及び AB4.2 で確認しています。
'************** MAIN Prgram **************
#console
dim ii as qword
dim temp$ as string
'input ii
''ii=41467157163
ii=1108099398
print ii
temp$=Dec2Bin(ii)
print temp$,Bin2Dec(temp$)
end
'**************************************************
Function Dec2Bin(ByVal data As qword) As String
Dim data2 As String
dim data3 as qword
data3=data
Do
'print "DebugWrite ",data3,(data3 mod 2)
If (data3 mod 2) = 0 Then
data2 = "0" + data2
Else
data2 = "1" + data2
End If
data3=Int(data3/2.0)
Loop Until data3=0
Dec2Bin = data2
End Function
'**************************************************
Function Bin2Dec(ByVal data As String) As string
Dim data2 As qword
dim c as qword
dim temp2$ as string
dim i2 as qword
data2=0
i2=0
c=Len(data)
Do
i2=i2+1
c=c-1
temp2$=Mid$(data,i2,1)
data2=data2+(2.0^c)*Val(temp2$)
Loop Until c=0
Bin2Dec = Str$(data2)
End Function
10進数から2進数に変化するプログラムですが,
メインプログラムで,qword宣言でinputを使用すると,入力後のデータ(ii)がゼロになってしまいます。dword宣言にするときちんと代入されます。
また,適当な10進数を2進数に変化する場合,ii=1108099398の場合きちんと計算されますが,ii=41467157163の場合計算されません。Dec2Bin関数内でデバックしたところ,data3の値がおかしいようです。
どなたかコメントお願いします。
環境:xp/sp2 + AB4.13 及び AB4.2 で確認しています。
'************** MAIN Prgram **************
#console
dim ii as qword
dim temp$ as string
'input ii
''ii=41467157163
ii=1108099398
print ii
temp$=Dec2Bin(ii)
print temp$,Bin2Dec(temp$)
end
'**************************************************
Function Dec2Bin(ByVal data As qword) As String
Dim data2 As String
dim data3 as qword
data3=data
Do
'print "DebugWrite ",data3,(data3 mod 2)
If (data3 mod 2) = 0 Then
data2 = "0" + data2
Else
data2 = "1" + data2
End If
data3=Int(data3/2.0)
Loop Until data3=0
Dec2Bin = data2
End Function
'**************************************************
Function Bin2Dec(ByVal data As String) As string
Dim data2 As qword
dim c as qword
dim temp2$ as string
dim i2 as qword
data2=0
i2=0
c=Len(data)
Do
i2=i2+1
c=c-1
temp2$=Mid$(data,i2,1)
data2=data2+(2.0^c)*Val(temp2$)
Loop Until c=0
Bin2Dec = Str$(data2)
End Function