- 掌握输出二进制码的算法
- 掌握二进制转换十进制的算法
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对应的正数。
那如果没有规定符号,就不用考虑这个了。