问题描述
- 新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的)
-
#include
#include
#include
unsigned int Ex_secret[30]={11,4,120,75,170,204,90,59,78,49,//用0~255的数表示8位2进制,一共240位
148,248,190,137,0,9,17,91,174,105,45,124,177,205,57,97,194,155,120,36};
unsigned int K[30];//等式(6)迭代完后的Ki值集合
unsigned int C=0;//初始C的值
long double Q[7];int i;
long n=262144;//n为图像大小,读取BMP文件时注意进行值传递
void main()
{
long double Ex_pow(int x, int y);
for(i=0;i
{
C=Ex_secret[i]^(C>>3|C<
}
for(i=0;i
{
K[i]=Ex_secret[i]^(C>>1|C<<7);
}
for(i=0;i<7;i++)
{
int j;
int s=0;
for(j=0;j<6;j++)
{
s=s+Ex_pow(256,j)*K[4*i+j];
}
long double W=n+Ex_pow(2,48);
Q[i]=(n+s)/W;
}
double x_u[7][2];
for(i=0;i<7;i++)
{
int j;
for(j=0;j<2;j++)
{
if(j==0)
x_u[i][j]=Q[i];
else
x_u[i][j]=0.5*Q[(i+1)%7];
}
}
//输出产生的(x,u)数对
for(i=0;i<7;i++)
{
int j;
for(j=0;j<2;j++)
{
if(j==0)
printf("%f ",x_u[i][j]);
else
printf("%fn",x_u[i][j]);} }
}
long double Ex_pow(int x, int y)//幂函数
{
int i;
int s=1;
for(i=0;i<y;i++)
{
s=s*x;
}
return (s);
}
解决方案
long double Ex_pow(int x, int y)//幂函数
{
int i;
int s=1;//改成double s = 1.;
for(i=0;i<y;i++)
{
s=s*x;
}
return (s);
}