主要是怎么用unsigned从右到左得到这个二进制数的反转(1变0,0变1)。用数字19和数字-12测试程序。对于正奇数,原始值和翻转值之间的关系是什么?
十进制数除以2取余数,余数保存到数组中,最后逆序输出就得到了二进制表示。
反转值把原来1变成0,0变成1,所以原值与翻转值的和就全是1,假设原值的二进制长度是n,那么原值和翻转值的和就是2的n次方-1。
比如19,二进制是10011,二进制长度是5,翻转值是01100,两者的和就是 11111,十进制结果就是2的5次方-1,也就是31
代码如下:
#include <stdio.h>
int main()
{
unsigned int n,s=0,r=1;
int buf[20]={0};
int i=0,j;
scanf("%u",&n);
while(n)
{
buf[i]=n%2;
n/=2;
i++;
}
//逆序输出得到其二进制
for(j=i-1;j>=0;j--)
printf("%d",buf[j]);
return 0;
}
不断求余2就好了,存储到一个数组,最后倒序输出数组内容,输出时判断为0则输出1,为1则输出0
反转值和原始值相加等于2的n次方,即二进制全是1