解题思路:把数当成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 人评分
C二级辅导-温度转换 (C语言代码)浏览:2678 |
C二级辅导-同因查找 (C语言代码)浏览:590 |
点我有惊喜!你懂得!浏览:1439 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:481 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2099 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:900 |
简单的a+b (C语言代码)浏览:457 |
时间转换 (C语言代码)浏览:698 |
前10名 (C语言代码)浏览:773 |
【计算直线的交点数】 (C语言代码)浏览:986 |
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 |
没写错,,,,我看错了;