解题思路:把数当成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 人评分
Hainui 2021-03-06 00:34:51 |
因为这0x80000000是16进制的字面量,要转换为二进制,其中每一个数字都相当于二进制中的四个比特,8相当于1000(也就是1*2^3)0相当于0000,以此类推,故0x80000000相当于1000 0000 0000 0000 0000 0000 0000 0000总共三十二个比特,所以其实你还写错了,这是我的理解,希望对你有帮助。
Hainui 2021-03-06 00:35:39 |
没写错,,,,我看错了;