gpt4 book ai didi

c++ - c 中的 pow() 函数给我带来错误的结果

转载 作者:行者123 更新时间:2023-11-30 20:48:38 24 4
gpt4 key购买 nike

我试图通过根据字段中的位置添加值来将 8 位数组转换为 0-255 之间的数字。

如果我使用

int array[8]={
0,1,1,0,0,0,0,1
};
int *p = array;
int i;
for (i = 0; i<8; i++){
if(p[i]!=0){
a = pow(2,i);
printf("%i\n",a);
}
};

我得到:

2
4
128

作为结果,到目前为止这是正确的。但如果我使用

int array[8]={
0,1,1,0,0,0,0,1
};
int *p = array;
int i;
for (i = 0; i<8; i++){
if(p[i]!=0){
a = a + pow(2,i);
printf("%i\n",a);
}
};

我得到的是:

2686758
2686762
2686890

当我期望时:

134

我做错了什么?

最佳答案

您尚未将a初始化为0。

以下应该有效

int array[8]={
0,1,1,0,0,0,0,1
};
int *p = array;
int i;
a = 0 // << Initialise a
for (i = 0; i<8; i++){
if(p[i]!=0){
a = a + pow(2,i);
printf("%i\n",a);
}
};

您始终需要为变量提供初始值。否则,您可以期望它们以任何值开始。

在第二段代码中,您正在累积 a=a+pow(2,i) ,并且在这里第一次使用 a 时,它将包含一些未确定的值。

关于c++ - c 中的 pow() 函数给我带来错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35900058/

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