解题思路:把数当成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;
}


点赞(5)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

Hainui 4年前 回复TA
@光仔 没写错,,,,我看错了;
Hainui 4年前 回复TA
@光仔 因为这0x80000000是16进制的字面量,要转换为二进制,其中每一个数字都相当于二进制中的四个比特,8相当于1000(也就是1*2^3)0相当于0000,以此类推,故0x80000000相当于1000 0000 0000 0000 0000 0000 0000 0000总共三十二个比特,所以其实你还写错了,这是我的理解,希望对你有帮助。
光仔 5年前 回复TA
请问大佬 为啥0x80000000是1000 0000 0000 0000 0000 0000 0000 0000,基础有点差不好意思