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"