使用数组和函数从二进制数计算无符号数



我很难通过只包含0和1的数组来计算数字。我已经建立了一个函数,可以将每个数字的指数相乘,但我有点困难。问题是,我遇到了一个循环,它计算2的所有指数,而不是运行3次,所以如果我试图计算0000000000000000000000000000111(应该运行3次(,我会得到1,2,4,8,16,32,64…4194304…以及所有这3次。

我的代码是:

for(int i = 31; i > 0; i--){
if(EndArray[i] == 1){
for(x = 0; x < 30 ; x++){
UnsignedArray[30-x] = ExpoFunction(x);
}
}
}

ExpoFunction是:

int ExpoFunction(int x){
int result = 1;
for(int i = 0 ; i < x ; i++){
result *= 2;
}
return result;
}

EndArray是一个包含32个0和1的数组。示例:000000000000000000000000000111,应该是7。最后,我想把所有的东西放在一个新的数组中,这个数组叫做UnsignedArray,然后把UnsignedArray的所有数字加在一起。

有什么问题或更好的方法吗?

您想将所有指数存储在UnsignedArray中,然后将该数组中的所有值求和,以获得十进制数,对吗?如果我没有错,你的for循环应该改为:

for(int i = 30; i >= 0; i--){ // should run from 30 to 0, not from 31 to 1
if(EndArray[i] == 1){
// just store one time, not using for loop of x as you did in your code.
UnsignedArray[30-i] = ExpoFunction(30-i);
printf("%dn", UnsignedArray[30-i]); // if you want to test the value.
} 
}

测试的主要功能:

int main()
{
int EndArray[31] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
unsigned int UnsignedArray[31] = {0};
for(int i = 30; i >= 0; i--){
if(EndArray[i] == 1){
UnsignedArray[30-i] = ExpoFunction(30-i);
printf("%un", UnsignedArray[30-i]);
} 
}
unsigned int sum = 0;
for(int i = 0; i < 31; i++) {
sum += UnsignedArray[i];
}
printf("decimal: %u", sum);
return 0;
}

输出:

1
2                                                                                                                       
4                                                                                                                       
decimal: 7

最新更新