进制的转换
写了一个十进制转二进制的文件开始正常,不过当到十进制数8589934591,也就是二进制中的33个1进就报溢出,有没有人可以给一段代码呢?? 问题点数:20、回复次数:12Top
1 楼szjhxu(天野)回复于 2005-05-30 23:24:34 得分 0
你是不是设置了定长字符串了?
Top
2 楼kyo19(萧梦楚)回复于 2005-05-31 19:37:29 得分 0
我用的不是字符型的!Top
3 楼51365133(渊海)回复于 2005-05-31 20:07:36 得分 2
int a=24; //要转变的10进制数
char b[MAX_PATH];
itoa(a,b,2); //后边的2就是2进制了,如果你要是想用8进制就改成itoa(a,b,8); 你可以做任意的进制。
AfxMessageBox(b);
我是用VC写的。用VB应该不是太难吧Top
4 楼51365133(渊海)回复于 2005-05-31 20:14:05 得分 0
int a=8589934591;
char b[MAX_PATH];
itoa(a,b,2);
AfxMessageBox(b);
测试过了,没有问题Top
5 楼cwasdf(如烟)回复于 2005-06-01 06:48:19 得分 5
你用数值型,数字大了当然会溢出
可以用字符串表示二进制,将十进制数除2取余,放入字符串,最后将字符串逆置。
下面是手写代码,只是一个思路:
dim aaa as long '要转换的数
dim bbb as string '储存二进制的字符串
dim Tmp as byte '临时变量
aaa=10 '假设要将10转换成二进制
当aaa>0时循环以下三条语句
Tmp=aaa mod 2 '除2后的余数
aaa=aaa\2 '将十进制数除2取整,注意不是“/”
bbb=bbb & str(Tmp) '将余数加入字符串
将bbb中内容的顺序倒转'如001001->100100
Top
6 楼kyo19(萧梦楚)回复于 2005-06-06 20:43:44 得分 0
楼上的兄弟请看一下
Private Sub Command1_Click()
Dim aaa As Double '要转换的数
Dim bbb As String '储存二进制的字符串
Dim Tmp As Byte '临时变量
aaa = 8589934591# '假设要将10转换成二进制
'当aaa>0时循环以下三条语句
Do While aaa > 0
Tmp = aaa Mod 2 '除2后的余数<----这里就会报溢出啊!!!
aaa = aaa \ 2 '将十进制数除2取整,注意不是“/”
bbb = bbb & Str(Tmp) '将余数加入字符串End Sub
Loop
Text1.Text = bbb
End SubTop
7 楼szjhxu(天野)回复于 2005-06-06 23:58:11 得分 0
kyo19(萧梦楚) :
为什么会溢出,俺也不知了。不过你的算法有错。
bbb = bbb & Str(Tmp) '将余数加入字符串End Sub
这句话应改为:
bbb =CStr(Tmp)& bbb
用CSTR()比STR()好,因为对正数,它会忽略符号位。
继续关注!Top
8 楼wjddjsm(菜鸟)回复于 2005-06-07 11:23:38 得分 2
笨法办先用hex转换成16进制,然后转换成二进制(用个case语句就行了)Top
9 楼szjhxu(天野)回复于 2005-06-07 12:39:51 得分 5
TO kyo19(萧梦楚) :
我想我知道错在哪了。
MOD运算符对数据进行运算时,会将前后两个数转成整数,在VB中,最在的整数是用LONG型表示的。
LONG型用四个字节存储,最大值为2147483647(转换成二进制后,不能超过32位),你现在的数超出了这个范围,因此溢出了。
Top
10 楼wumylove1234(毁于随)回复于 2005-06-07 15:28:18 得分 0
同意楼上.
Top
11 楼kyo19(萧梦楚)回复于 2005-06-08 18:43:52 得分 0
不知有没有什么办法能在转为二进制后长度到33位呢?Top
12 楼lsftest()回复于 2005-06-08 21:40:10 得分 6
不知有没有什么办法能在转为二进制后长度到33位呢?
===========================
可以,在大数运算的时候不要用mod、\之类的运算,最好用会最基本的加减乘除法就不会溢出了。。。
例如:
把下面这句:
Tmp = aaa Mod 2 '除2后的余数<----这里就会报溢出啊!!!
改为:
Tmp = aaa - Int(aaa / 2) * 2
看看。。。。。。。。。
其他的语句自己改。。。。。。。。。
Top




