|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <math.h>
//输入 2 = 00000000 00000000 00000000 00000010
//输出 4294967294 = 11111111 11111111 11111111 11111110
int main(void){
int num_binary[32] = {0}, index;
unsigned int num, i, j = 32, a;
double count, total;
scanf("%u", &num);
while(num){
a = num % 2;
num_binary[j-1] = a;
num = num / 2;
j--;
}
for(i = 0;i < j;i++){
if(num_binary[i]==0){
num_binary[i] = 1;
}
else{
break;
}
}
for(index=0;index<j;index++){
count = num_binary[index] * pow(2, j);
total += count;
j--;
}
printf("%u\n", (unsigned int)total);
}
按理说输出应该是4294967294,但是我这个输出的是2147418112. 求大神帮我看看为啥会出现这问题?
我解释的没错,不过循环次数少了一次
- #include <stdio.h>
- #include <math.h>
- //输入 2 = 00000000 00000000 00000000 00000010
- //输出 4294967294 = 11111111 11111111 11111111 11111110
- int main(void){
- int num_binary[32] = {0}, index;
- unsigned int num, i, j = 32, a;
- double count, total;
- scanf("%u", &num);
- while(num){
- a = num % 2;
- num_binary[j-1] = a;
- num = num / 2;
- j--;
- }//此处j值已经改变并非32
- for(i = 0;i < 32;i++){ //虽然此处用j不影响结果但是不符合逻辑
- if(num_binary[i]==0){
- num_binary[i] = 1;
- }
- else{
- break;
- }
- }
- j = 32;
- for(index=0;index<32;index++){ //循环范围是0-31,j在变化
- j--;
- count = num_binary[index] * pow(2, j);
- total += count;
- }
- printf("%u\n", (unsigned int)total);
- return 0;
- }
复制代码
|
|