UDP广播协议叫吃饭


私信TA

用户名:Mustenaka

访问量:134849

签 名:

个人博客www.mustenaka.cn

等  级
排  名 12
经  验 23726
参赛次数 8
文章发表 196
年  龄 3
在职情况 学生
学  校 Sky_box
专  业 NE

  自我简介:

欢迎光临我的博客www.mustenaka.cn,Python,C#,U3D,C/C++开发合作可以找我

解题思路:
    本题目需要注意如下事项:

  1. 使用unsigned int 类型,不适用的话会产生错误

  2. 使用while循环做位数判断控制,理论上n多大都可以的,因为循环可以进行判重,n>=32可以通过取余数的方式把其控制在32位以内

  3. 如何快速查找到unsigned int 最大的一位数,可以直接unsigned ing big_int =(1<<31)这样的操作找到最大的一位数,不需要你去背32进制,也不需要你去背实际的数字,由于1本身是1位,所以直接左移31位就可以到达32位最大值的位置。

  4. 通过一个判断n进行判断n是否左移还是右移动,n=0时不需要移动


参考代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
 unsigned int Fvalue= (1<<31);    //unsigned int 最高位为1
 unsigned int value;              //输入的value值
 int n;
 cin>>value>>n;
 if(n>0){
  //right
  while(n--){
   if(value&1){    //当value的第低位有值的时候进行操作
    value>>=1;        //右移操作
    value|=Fvalue;     //或操作
   }else{
    value>>=1;    //地位没有值的时候,直接移动就可以了
   }
  }
 }else if(n<0){    //与上文反过来即可,注意此时n=(-n)的操作取整数,n=0时不进入判断
  //left 
  n=(-n);
  while(n--){
   if(value&Fvalue){    当value的最高位有值的时候
    value<<=1;
    value|=1;
   }else{
    value<<=1;
   }
  } 
 }
 cout<<value<<endl; //输出操作过后的value值
 return 0;
}  
//dotcpp - 1775


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区