好吧我之前发生过这种情况,因为内存分配问题或错误寻址等变量随机更改数字,例如当您超出数组范围时。不过,我没有使用数组或指针或地址,所以我不知道为什么在执行这个循环后,突然发觉“指数”设定为0
后等于288
内环路:疯了,为什么我的变数会改变我?
编辑:它决定特别打破:0x80800000
。
这并不在一个测试打破,我们有各自的功能又被称为值应设置等于一次“测试”客户端,它会遍历多个测试案例,每个再次调用这一次,他们的原始值。
/*
* float_i2f - Return bit-level equivalent of expression (float) x
* Result is returned as unsigned int, but
* it is to be interpreted as the bit-level representation of a
* single-precision floating point values.
* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while
* Max ops: 30
* Rating: 4
*/
unsigned float_i2f(int x) {
int sign= 0;
int a=0;
int exponent=0;
int crash_test=0;
int exp=0;
int fraction=0;
int counter=0;
if (x == 0) return 0;
if (!(x^(0x01 << 31)))
{
return 0xCF << 24;
}
if (x>>31)
{
sign = 0xFF << 31;
x = (~x) + 1;
}
else
{
sign = 0x00;
}
//printf(" After : %x ", x);
a = 1;
exponent = 0;
crash_test = 0;
while ((a*2) <= x)
{
if (a == 0) a =1;
if (a == 1) crash_test = exponent;
/*
if(exponent == 288)
{exponent =0;
counter ++;
if(counter <=2)
printf("WENT OVERBOARD WTF %d ORIGINAL %d", a, crash_test);
}
*/
if (exponent > 300) break;
exponent ++;
a *= 2;
}
exp = (exponent + 0x7F) << 23;
fraction = (~(((0x01)<< 31) >> 7)) & (x << (25 - (exponent + 1)));
return sign | exp | fraction;
}
我会在调试代码的过程中添加'cout <<'进度,因为我看不懂它。 – Blender
这是否会产生错误的最小示例? – Beta
经过288次迭代后,这就是*它*它将等于什么...... –