CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

进制的转换

楼主kyo19(萧梦楚)2005-05-30 19:05:50 在 VB / 基础类 提问

写了一个十进制转二进制的文件开始正常,不过当到十进制数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

相关问题

  • 进制转换
  • 进制转换
  • 进制转换
  • 进制的转换
  • 关于进制转换
  • 进制转换问题
  • 进制转换(加分)
  • 有关进制转换···
  • BCB进制转换问题~
  • 进制转换问题

关键词

  • 二进制
  • 转换
  • 字符串
  • 十进制
  • aaa
  • 余数
  • 进制
  • bbb
  • itoa
  • tmp

得分解答快速导航

  • 帖主:kyo19
  • 51365133
  • cwasdf
  • wjddjsm
  • szjhxu
  • lsftest

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo