首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB中关于二进制加法的程序运行后发现的有关问题

2013-01-09 
BCB中关于二进制加法的程序运行后发现的问题BCB中关于二进制加法的程序运行后发现的问题我用BCB写了一个计

BCB中关于二进制加法的程序运行后发现的问题
BCB中关于二进制加法的程序运行后发现的问题
我用BCB写了一个计算器程序,其他进制运算都没有问题,唯独二进制加法运算,编译没有错误,但运行后使用二进制加法进行运算时,出现了这个错误:First chance exception at $5000D5E8. Exception class $C0000005 with message 'access violation at 0x5000d5e8: read of address 0xe5582603'. Process 计算器.exe (5428)。
出现这个错误时,同时弹出一个对话框“Debugger Exception Notification”,关掉对话框后,光标停留在,红色字体行:
char& __fastcall operator [](const int idx)
    {
      ThrowIfOutOfRange(idx);   // Should Range-checking be optional to avoid overhead ??
      Unique();                 // Ensure we're not ref-counted (and Ansi)
      return Data[idx-1];
    }
以上函数不是我编写的,是自动弹出的dstring.h中的一个函数。
我写的二进制加法代码是:
int a1=0,a2,b1=0,b2,c1;
      char c[256];
      
      int n=a.Length();//a 是计算器中按加号时Edit1->Text的内容,也就是被加数,例如一个运算,111+101,a为“111”
      int m=Edit1->Text.Length();//Edit1->Text为按加号后的输入的内容,也就是加数,为“101”
      for(int i=0;i<n;i++)
      {
          a2=pow(2,i);//a2等于2的i次方
          a1=a1+int(a[n-1-i])*a2;//将输入二进制数转换为十进制数,赋值给a1
      }
      for(int i=0;i<m;i++)
      {
          b2=pow(2,i);//b2等于2的i次方
          b1=b1+int(Edit1->Text[m-1-i])*b2;//将输入二进制数转换为十进制数,赋值给b1
      }
      c1=a1+b1;
      itoa(c1,c,2);//将c1转换成二进制数,保存在c中
      Edit1->Text=c;//将c赋值给Edit1->Text,显示运算结果
请问各位高手,这个问题怎么解决啊?非常感谢
[解决办法]
只需提醒你一句:String对象的下标是从1开始的。
[解决办法]
好几个概念错误
首先,你需要搞清楚,字符'1'不等于数字1
a1=a1+int(a[n-1-i])*a2;改成 a1=a1+int(a[n+1+i]-'0')*a2;
[解决办法]
按你的转换方法,简单写了点代码


String str=Edit1->Text.Trim(); //"101"
int ii=0;
for(int i=1;i<=str.Length();i++)
{
ii=ii*2+str[i]-'0';
}
Edit2->Text=ii; //"5"

热点排行