[unsigned]使用unsigned,把一个10进制数转换成为2进制,再从右到左得到这个二进制数的反转(1变0,0变1)

主要是怎么用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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632