生成字符串:private sub GetStr(byval N as long) as string getstr=string(n,"1") end sub 得到二进制形式识别的值:private function strBinToLong(byval strBin as string) as long 'strbin的长度不能超过31位,过了就会溢出. dim I as long,J as long,K as string k=strreverse(strbin)
for i = 0 To len(K) - 1 j = j+iif(mid(K, i + 1, 1) = "1",2^i,0) next end functon
二进制转10进制,我一直用的这个 Public Function BIN_to_DEC(ByVal Bin As String) As Long Dim i As Long For i = 1 To Len(Bin) BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1)) Next End Function
刚居然忘记自己进的是VB专题 然后就用C语言写了个 你看看 你要是不会转换到VB再说声 #include "stdio.h" #include "math.h" void main(){ int N=0,num=0,ans=0; printf("Please enter the number:"); scanf("%d",&N); ans=pow(2,N)-1; while(N>0){ N=N-1; num=num+pow(10,N); } printf("%d\n",num); printf("%d\n",ans); getch(); }
Private Sub Command1_Click() Dim x As Byte, tmp As String x = InputBox("xxx", , 4) tmp = String(x, "1") MsgBox BIN_to_DEC(tmp)
End Sub Public Function BIN_to_DEC(ByVal Bin As String) As Variant '****************************************************************** ' 用途:将二进制转化为十进制 ' 输入:Bin(二进制数) ' 输入数据类型:String ' 输出:BIN_to_DEC(十进制数) ' 输出数据类型:Decimal ' 输入的最大数为(96个1),输出最大数为"79228162514264337593543950335" ' by chiaboyzyq(猴哥) 2010-03-22 '****************************************************************** Dim i As Integer BIN_to_DEC = CDec(BIN_to_DEC) For i = 1 To Len(Bin) BIN_to_DEC = BIN_to_DEC * 2 + Mid(Bin, i, 1) Next i
End Function
真不好意思,犯了几个低级错误......要是在IDE里打打就不会.......更正一下:生成字符串:private function GetStr(byval N as long) as string getstr=string(n,"1") end function 得到二进制形式识别的值:private function strBinToLong(byval strBin as string) as long 'strbin的长度不能超过31位,过了就会溢出. dim I as long,J as long,K as string k=strreverse(strbin)
for i = 0 To len(K) - 1 j = j+iif(mid(K, i + 1, 1) = "1",2^i,0) next strBinToLong=j end function 溢出的原因是,VB6里没有无符号变量类型,因此将最高位作为符号位,所以输入的字符串最多31位.想要更多,就要把J的声明换成variant,再设置子类型为decxxxxx那个啥变量类型(太长了记不住.....),理论上有95位的长度了.
来了点兴趣,到IDE里试了一下,看看到底能处理多少位的二进制值.没想到大吃一惊.先上代码:Option Explicit '测试Decimal数据类型的 Private Sub Command1_Click() Dim K As String
K = String(1023, "1")
Debug.Print Format(strBinToLong(K), "0") End SubPrivate Function strBinToLong(ByVal strBin As String) As Variant 'strbin的长度不能超过1023位,过了就会溢出, Dim I As Long, J As Variant, K As String K = StrReverse(strBin) '反序
For I = 0 To Len(K) - 1 J = J + IIf(Mid(K, I + 1, 1) = "1", CDec(2) ^ I, 0) Next strBinToLong = J End Function 没想到Variant居然有1024位的长度!!!
getstr=string(n,"1")
end sub
得到二进制形式识别的值:private function strBinToLong(byval strBin as string) as long
'strbin的长度不能超过31位,过了就会溢出.
dim I as long,J as long,K as string k=strreverse(strbin)
for i = 0 To len(K) - 1
j = j+iif(mid(K, i + 1, 1) = "1",2^i,0)
next
end functon
Public Function BIN_to_DEC(ByVal Bin As String) As Long
Dim i As Long
For i = 1 To Len(Bin)
BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))
Next
End Function
然后就用C语言写了个
你看看 你要是不会转换到VB再说声
#include "stdio.h"
#include "math.h"
void main(){
int N=0,num=0,ans=0;
printf("Please enter the number:");
scanf("%d",&N);
ans=pow(2,N)-1;
while(N>0){
N=N-1;
num=num+pow(10,N);
}
printf("%d\n",num);
printf("%d\n",ans);
getch();
}
Private Sub Command1_Click()
Dim x As Byte, tmp As String
x = InputBox("xxx", , 4)
tmp = String(x, "1")
MsgBox BIN_to_DEC(tmp)
End Sub
Public Function BIN_to_DEC(ByVal Bin As String) As Variant
'******************************************************************
' 用途:将二进制转化为十进制
' 输入:Bin(二进制数)
' 输入数据类型:String
' 输出:BIN_to_DEC(十进制数)
' 输出数据类型:Decimal
' 输入的最大数为(96个1),输出最大数为"79228162514264337593543950335"
' by chiaboyzyq(猴哥) 2010-03-22
'******************************************************************
Dim i As Integer
BIN_to_DEC = CDec(BIN_to_DEC)
For i = 1 To Len(Bin)
BIN_to_DEC = BIN_to_DEC * 2 + Mid(Bin, i, 1)
Next i
End Function
getstr=string(n,"1")
end function
得到二进制形式识别的值:private function strBinToLong(byval strBin as string) as long
'strbin的长度不能超过31位,过了就会溢出.
dim I as long,J as long,K as string k=strreverse(strbin)
for i = 0 To len(K) - 1
j = j+iif(mid(K, i + 1, 1) = "1",2^i,0)
next
strBinToLong=j
end function
溢出的原因是,VB6里没有无符号变量类型,因此将最高位作为符号位,所以输入的字符串最多31位.想要更多,就要把J的声明换成variant,再设置子类型为decxxxxx那个啥变量类型(太长了记不住.....),理论上有95位的长度了.
'测试Decimal数据类型的
Private Sub Command1_Click()
Dim K As String
K = String(1023, "1")
Debug.Print Format(strBinToLong(K), "0")
End SubPrivate Function strBinToLong(ByVal strBin As String) As Variant
'strbin的长度不能超过1023位,过了就会溢出,
Dim I As Long, J As Variant, K As String K = StrReverse(strBin) '反序
For I = 0 To Len(K) - 1
J = J + IIf(Mid(K, I + 1, 1) = "1", CDec(2) ^ I, 0)
Next
strBinToLong = J
End Function
没想到Variant居然有1024位的长度!!!
intTmp = 2 ^ N - 1
十进制数值 = 2 的 n 次方 - 1如:Function BitToAlgorism(Byval BitCount As Long) As Long
BitToAlgorism = 2 ^ BitCount - 1
End FunctionDim BitSize As Long
BitSize = 4Msgbox BitSize & "个二进制位为1是十进制的:" & CStr(BitToAlgorism(BitSize)) & vbCrlf & _
"二进制表示:" & String(BitSize, "1")