gpt4 book ai didi

c++ - 快疯了,为什么我的变量在我身上发生变化?

转载 作者:行者123 更新时间:2023-11-28 03:46:33 27 4
gpt4 key购买 nike

好吧,我之前遇到过这种情况,变量会因为内存分配问题或寻址错误等原因随机更改数字,例如当您超出数组范围时。但是,我没有使用数组、指针或地址,所以我不知道为什么在执行此循环后它突然决定设置为 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;
}

最佳答案

使用调试器或 IDE,在指数值上设置观察/断点/断言(例如 (exponent > 100)

调用 float_i2f() 时 x 的违规值是多少?所有 x 或某个范围的指数都爆炸了吗?

(您刚才是说 x = 0x80800000 时吗?您是否在指数上设置了监视并在调试器中步进该值?应该回答您的问题。例如,您是否检查过 0x807FFFFF 是否有效?)

关于c++ - 快疯了,为什么我的变量在我身上发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com