如 25 的32位二进制为 0000 0000 0000 0000 0000 0000 0001 1001
翻转后为 1001 1000 0000 0000 0000 0000 0000 0000
对应十进制为 2550136832
# include <stdio.h>
# include <math.h>
int main()
{
int num = 0;
int sum = 0;
int temp = 0;
printf("please input one number\n");
scanf_s("%d", &num);
for (int b = 0; b < 32; ++b)
{
temp = ((num >> b) & 1);
sum += pow((float)2, (31 - b)) * temp; /*cpp中pow函数有类型的问题,所以对pow(x,y)中的x进行类型(double也行)强转;此外求和还可以利用位运算优化*/
}
printf("\n");
printf("%u\n", sum); /*一定是无符号输出 否则会超出有符号的最大值*/
return 0;
}
优化如下
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
int main()
{
int num = 0;