32位数字C 的例外
Exception for 32 bit number C++
为什么我得到异常
Unhandled exception at 0x00000001 in TestingCOA.exe: 0xC0000005: Access violation (parameters: 0x00000008).
当我尝试使用4294967295或更高数字时。在我的计算机上sizeof
Double是8bytes
,它应该能够处理和使用2^64 -1
号码,但它正在生成32位数字的例外,为什么?
int main()
{
double n,remainderA;
int AfterDecimal1[64],RemExponent1;
cout<< "Enter numbern";
cin>> n;
remainderA=a-(int)a;
HandleFractionNumber(remainderA,AfterDecimal1,RemExponent1);
}
int HandleFractionNumber(double remainder,int (&Goku)[64],int &RemExponent)
{
int x=0;
for(int i=0;;i++)
{
remainder*=2;
if(remainder>1)
{
remainder-=1;
Goku[x]=1;
x++;
}
else
if(remainder<1)
{
Goku[x]=0;
x++;
}
if(remainder==1)
{
Goku[x]=1;
break;
}
RemExponent=x;
}
double不能那样工作。它是一个字段和某些格式(称为IEEE双重精度)的结构。并非所有64位都可以用于Mantissa。
然而,它应该在输入处食用您提到的数字(4294967295)。您确定这是您所说的吗?是您引用的程序吗?
remainderA = a - (int)a;
在32位计算机上,如果A> 429496725.尝试打印remainderA
,则此处的结果是不确定的,我敢打赌它很大,领先的HFN
覆盖了缓冲区。
您的数组边界用完了。
x 永远完成,直到大于64。
在上面的代码中,没有理由剩余的也永远成为一个。将双重与==进行比较是不正确的。它仅适用于整数算术。
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 浮点数为 32 位和 64 位二进制表示形式
- C++易失性:保证 32 位访问?
- C++将 16 位值转换为 32 位值
- 如何在 64 位平台上计算 32 位哈希C++?
- C++中的24位到32位转换
- 在机器字大小等于 32 位的计算机上int64_t如何工作?
- uint32_t如何保证 32 位?
- 将代码从 32 位迁移到 64 位时出现问题 Visual Studio 2010
- 如何将32位字符与内联assembelyc++中的32位字符进行比较
- 如何在 C++ 中将 2 个数字存储在 32 位数字中
- 32位数字C 的例外
- 位操作和> 32 位数字?
- 64位数字到2x 32位
- 将 32 位数字快速哈希到数组中
- 为什么4294967295(32位的最高数字)等于-1
- 将1到32位的数字附加到字符缓冲区