将一个数的二进制翻转后得到其对应的十进制

版权声明:Zhining https://blog.csdn.net/weixin_43214609/article/details/83547247
  • 掌握输出二进制码的算法
  • 掌握二进制转换十进制的算法
    unsigned int reverse_bit(unsigned int value)
    {
    	int arr[40] = { 0 }; unsigned int num = 0;
    	printf("%d翻转二进制之后的二进制:\n",value);
    	for (int i = 0; i < 32; i++)//翻转二进制之后的二进制
    	{
    		arr[i] = (value >> i) & 1;
    		printf("%d ", arr[i]);
    	}
    	for (int i = 0; i < 32; i++)//二进制转十进制
    	{
    		num = 2 * num + arr[i];
    	}
    	return num;
    }
    
    int main()
    {
    	unsigned int value = 24;
    	int num = reverse_bit(value);
    	printf("\n转换为十进制为:\n");
    	printf("%d", num);
    
    	system("pause");
    	return 0;
    }

这个算法还有一些缺陷:

如果是一个奇数,二进制最后一位是1,那翻转过去就是负数,所以就应该将奇数另作考虑。

00000000000000000000000000000101--5

11111111111111111111111111111010--5的反码

11111111111111111111111111111011--(-5)的二进制码/5的补码

那么负数转化为其对应的正数就很简单了:

先给负数二进制-1;再取其反码就是对应的正数了。

大概说一下思路:

1.先翻转求对应的负数N。

2.判断最初的数num&1是否为1,如果为1就求 ~(N-1),所得即为num对应的正数。

那如果没有规定符号,就不用考虑这个了。

猜你喜欢

转载自blog.csdn.net/weixin_43214609/article/details/83547247