解题思路:把数当成2进制即可,该数对2取模即可得到当前末位为1或为0。取模后将该数除以2相当于右移1位,空出首位。利用之前取模的结果,若为1,则将右移了1位的数与0x80000000按位或,相当于把之前末位的1写入新数的首位。取模为0不用管

注意事项:

参考代码:

#include <stdio.h>
int main()
{
    unsigned int a,n,i;
    scanf("%u %u",&a,&n);
    while(n--)
    {
        i=a%2;//把a当作二进制,所以对2取模看看末位是否为1
        a/=2;//把a右移1位,空出首位
        if(i==1)//原数末位为1
        {
            a|=0x80000000;//和1000 0000 0000 0000 0000 0000 0000 0000按位或操作,可把之前末位的1写到新数的首位而其他位不变
        }
    }
    printf("%u\n",a);
    return 0;
}


 

0.0分

4 人评分

  评论区

请问大佬 为啥0x80000000是1000 0000 0000 0000 0000 0000 0000 0000,基础有点差不好意思
2020-03-02 23:10:28
  • «
  • 1
  • »