当前位置: 首页 > news >正文

做任务兼职赚钱的网站小程序设计

做任务兼职赚钱的网站,小程序设计,苏州网站制作,制作小程序的公司初学者在学完位操作符之后,总是不能很好的掌握,因此这篇文章旨在巩固对位操作符的理解与使用。 有的题目可能会比较难以接受,但是看完一定会有收获 目录 位操作符:一些题目:不创建临时变量交换整数整数转换二进制中1的…

初学者在学完位操作符之后,总是不能很好的掌握,因此这篇文章旨在巩固对位操作符的理解与使用。
有的题目可能会比较难以接受,但是看完一定会有收获

目录

  • 位操作符:
  • 一些题目:
    • 不创建临时变量交换整数
    • 整数转换
    • 二进制中1的个数
    • 不用加减乘除实现加法
    • 寻找奇数
    • 错误的集合(必看)
  • 小技巧:
  • 总结:

位操作符:

开始之前,先来了解一下位操作符

&按位与,只有两个数同时为真才为真,否则为假
| 按位或,只有两个数同时为假才为假,否则为真
^按位异或,两个数相同为0,不同为0

例子:
按位与:
在这里插入图片描述
按位或:
在这里插入图片描述
按位异或:
在这里插入图片描述

一些题目:

题目大都来自牛客与力扣,虽然不能很好的囊括位操作符的全部,但是可以很好的加深理解。

一一一一一一一一一一一一一一分割线一一一一一一一一一一一一一一

不创建临时变量交换整数

注意:此题无链接

不能创建临时变量(第三个变量),实现两个数的交换。
a=10b=20

做这题首先要知道:

位操作符支持交换律
num^num=00^num=num
那么我们就可以解决这道题

先来看代码实现,方便理解思路

代码实现:

#include <stdio.h>
int main()
{int a = 10;int b = 20;a = a^b;b = a^b;a = a^b;printf("a = %d b = %d\n", a, b);return 0;
}

思路:

a = a^b的a带入b = a^b中的a,即b=a^b^b,则b=10
b = a^b的b带入a =a^b中的b,即a=a^a^b,则a=20

一一一一一一一一一一一一一一分割线一一一一一一一一一一一一一一

整数转换

整数转换,链接奉上
在这里插入图片描述
思路:

首先我们要知道,num & 1为最后一位二进制的数字,
那我们使用移位操作符遍历一下整数的32位比特位就迎刃而解

代码实现:

int convertInteger(int A, int B)
{int count=0;//创建计数器int i=0;for(i=0;i<32;i++){if((A>>i&1)!=(B>>i&1))count++;}return count;   
}

一一一一一一一一一一一一一一分割线一一一一一一一一一一一一一一

二进制中1的个数

注意:此题无链接
在这里插入图片描述

这题和上一题大同小异,都可以使用位移操作符与位操作符遍历解决,但这种方法必须循环32次(整形情况下)才能得到结果

还有一种方法:

使用num&(num-1),这个式子的意义是什么呢?
是将式子最右边的1消掉

举个例子:

while(num)
{num&(num-1);
}
//假设在while循环中,设num为15,那么二进制就为11111111 num1110 num-11110 新的num1101 num-11100 新的num1011 num-11000 新的num0111 num-10000 新的num

可以看到,当num为0时循环停止,循环了4次,也就是1的个数

我们就可以使用这种方法做题

思路:

使用num&(num-1)计算二进制1的个数

代码实现:

#include <stdio.h>
int main()
{int num = -1;int i = 0;int count = 0;//计数while(num){count++;num = num&(num-1);}printf("二进制中1的个数 = %d\n",count);return 0;
}

一一一一一一一一一一一一一一分割线一一一一一一一一一一一一一一

不用加减乘除实现加法

不用加减乘除做加法,链接奉上
在这里插入图片描述

按位异或其实有个别名,叫做不进位加法,什么意思呢?
就是可以计算不进位的加法
例如:

int a=10;
//0000 1010
int b=20;
//0001 0100
int sum=a^b;
//0001 1110也就是30,
//我们发现当没有进位时,按位异或可以代替加法,那么有进位怎么办呢?

不过我们要想解决这个题,仅仅知道不进位加法是不够的,
我们从10进制举例
计算12+9

1.1+0=0,2+9=1(先不计算进位),结果为11
2.2+9有进位,进位为10
3.两者相加:10+11=21

既然如此,我们也可以利用这种方法计算,那进位如何表示呢?
二进制中只有两个1才会进位,因此我们按位与两个要相加的数,再进行左移就可以模拟进位。

思路:

1.将两个要相加的数字按位异或
2.将两个数字进行按位与并向左移1位计算出进位
3.将两数相加,此时只需重复上述两个步骤,直到进位为0。

代码实现:

int Add(int num1, int num2 ) 
{int sum=0;int forward=0;do{sum=num1^num2;forward=(num1&num2)<<1;num1=sum;//num1与num2顺序不重要num2=forward;}while(forward);return sum; 
}

一一一一一一一一一一一一一一分割线一一一一一一一一一一一一一一

寻找奇数

寻找奇数,链接奉上
在这里插入图片描述
思路:

在不创建临时变量交换整数,
我们了解了num^num=00^num=num,那我们这题就可以使用这种方法

#include <stdio.h>
#include<stdlib.h>int main() 
{int n=0;scanf("%d",&n);int arr[n];//由编译器决定是否支持加长数组,//牛客网支持,也可以不使用加长数组//根据题目条件选择合适的个数范围int ans=0;for(int i=0;i<n;i++){scanf("%d",&arr[i]);ans^=arr[i];}printf("%d",ans);return 0;
}

一一一一一一一一一一一一一一分割线一一一一一一一一一一一一一一

错误的集合(必看)

错误的集合,链接奉上
在这里插入图片描述
思路:
我们发现,重复的数字与消失的数字出现的次数都是偶数次(2和0次),其他的数字出现次数是奇数次(1次),此时我们可以多添加一个从1~n正确的数字集合,使重复的数字与缺失的数字为奇数次(3和1次),其他的数字出现次数为偶数次(2次),我们利用异或就可以比较好的解决
x,y分别为重复的数字与消失的数字,将2n个数字按位异或在一起,因为num^num=00^num=num,结果为x^y,我们记为xor
因为x!=y,故xor不为0,我们此时令lowbit=xor&(-xor),这是为了取得x与y最低位不同比特位(其实只要是不同的就可以,只是最低位好获得),简单的解释一下:

当x与y有最低位bit位不同时时,当前位异或的结果为1,那我们如何找到这个1呢
使用lowbit=xor&(-xor)
例如:
0000 1010 10的补码
1111 0110 -10的补码
0000 0010 按位与得到最低位不同比特位

得到lowbit后,将2n个数字分成两组,第一组每个数字a都满足a&lowbit==0,第二组每个数字b满足b&lowbit!=0
创建个2个变量,num1与num2,将第一组的a按位与在一起赋值给num1,另一组同样赋值给num2,此时num1与num2就是x或y,因为相同的数字肯定在一组,并且除了x与y出现的次数都是偶数次,故得到num1与num2就是x或y
此时将x与nums数组遍历比较一遍,如果出现即为消失的数字,否则相反。
代码实现:

int* findErrorNums(int* nums, int numsSize, int* returnSize) 
{static int arr[2];int xor=0;for(int i=1;i<=numsSize;i++){xor^=nums[i-1];xor^=i;}//得到x^yint lowbit=xor&(-xor);//得到最低位比特位int num1=0;int num2=0;for(int i=0;i<numsSize;i++)//分组nums数组{if((nums[i]&lowbit)==0)num1^=nums[i];elsenum2^=nums[i];}for(int i=1;i<=numsSize;i++)//分组添加的数字{if((i&lowbit)==0)num1^=i;elsenum2^=i;}int count=0;//计数器int i=0;for(i=0;i<numsSize;i++){if(nums[i]==num1)count++;}if(count==0){arr[1]=num1;arr[0]=num2;}else{arr[1]=num2;arr[0]=num1;}*returnSize=2;return arr;
}

小技巧:

一些位运算中的简便运算

1.x & 1 是奇数返回1,是偶数返回零,可以放在if中判断奇偶
2. x |= 1<<j 等价于 x += pow(2,j);
3.x<<2 x<<1,在十进制中表现的是乘上2的多少次方,在二进制中,就是先将这个x转换为二进制,然后整个数往前移位。(最后转化回去还是一样的)
4.num^num=00^num=num,异或也叫xor

总结:

在遇到数字重复时,二进制时,计算时,可能会有操作符的做法
遇到不会做的题很正常,不要感到沮丧,要知道我们也是站在巨人的肩膀上才能看得更远


文章转载自:
http://scramasax.hqbk.cn
http://nondrinker.hqbk.cn
http://ertebolle.hqbk.cn
http://coolth.hqbk.cn
http://simplist.hqbk.cn
http://exterminative.hqbk.cn
http://inharmonious.hqbk.cn
http://oversailing.hqbk.cn
http://pablum.hqbk.cn
http://splash.hqbk.cn
http://zibeline.hqbk.cn
http://shapka.hqbk.cn
http://expostulator.hqbk.cn
http://considerable.hqbk.cn
http://preceptive.hqbk.cn
http://reprove.hqbk.cn
http://hemitrope.hqbk.cn
http://hypnophobic.hqbk.cn
http://unrewarded.hqbk.cn
http://anthill.hqbk.cn
http://arrect.hqbk.cn
http://noncanonical.hqbk.cn
http://expediate.hqbk.cn
http://godchild.hqbk.cn
http://hoosegow.hqbk.cn
http://mentalistic.hqbk.cn
http://glenoid.hqbk.cn
http://amenorrhea.hqbk.cn
http://jovial.hqbk.cn
http://dirty.hqbk.cn
http://jazzily.hqbk.cn
http://mathilda.hqbk.cn
http://unescapable.hqbk.cn
http://proclinate.hqbk.cn
http://jargonelle.hqbk.cn
http://euphemise.hqbk.cn
http://tweak.hqbk.cn
http://lexicology.hqbk.cn
http://skiwear.hqbk.cn
http://celibate.hqbk.cn
http://zaratite.hqbk.cn
http://astrobiology.hqbk.cn
http://rapier.hqbk.cn
http://smithite.hqbk.cn
http://disheartenment.hqbk.cn
http://hypocenter.hqbk.cn
http://scrutinize.hqbk.cn
http://underjawed.hqbk.cn
http://lapidation.hqbk.cn
http://theirs.hqbk.cn
http://perseid.hqbk.cn
http://busload.hqbk.cn
http://paratroop.hqbk.cn
http://morena.hqbk.cn
http://boost.hqbk.cn
http://microseism.hqbk.cn
http://achromic.hqbk.cn
http://undreamt.hqbk.cn
http://perceptibility.hqbk.cn
http://sinbad.hqbk.cn
http://excerption.hqbk.cn
http://tuinal.hqbk.cn
http://eudaemon.hqbk.cn
http://slippage.hqbk.cn
http://laryngopharynx.hqbk.cn
http://interindividual.hqbk.cn
http://bergsonian.hqbk.cn
http://esperanto.hqbk.cn
http://jimjams.hqbk.cn
http://bonanzagram.hqbk.cn
http://pluto.hqbk.cn
http://poetess.hqbk.cn
http://laryngophone.hqbk.cn
http://seastar.hqbk.cn
http://companionship.hqbk.cn
http://postposition.hqbk.cn
http://distribution.hqbk.cn
http://telangiectasy.hqbk.cn
http://encounter.hqbk.cn
http://gynecological.hqbk.cn
http://capitulaitonist.hqbk.cn
http://impiety.hqbk.cn
http://omnivore.hqbk.cn
http://hipshot.hqbk.cn
http://yerevan.hqbk.cn
http://heroically.hqbk.cn
http://praiseful.hqbk.cn
http://acetarsone.hqbk.cn
http://desalinize.hqbk.cn
http://trochoid.hqbk.cn
http://radiation.hqbk.cn
http://overslaugh.hqbk.cn
http://katalase.hqbk.cn
http://labrum.hqbk.cn
http://baotou.hqbk.cn
http://lentiginous.hqbk.cn
http://xerography.hqbk.cn
http://pavid.hqbk.cn
http://indelicacy.hqbk.cn
http://mince.hqbk.cn
http://www.dt0577.cn/news/68835.html

相关文章:

  • 厦门 网站制作万网注册域名查询
  • 网站建设外包协议安卓优化神器
  • 网站开发 技术路线百度关键词优化培训
  • 移动应用开发学什么快速提升排名seo
  • 二级域名网站可以做关键词优化吗网站排名在线优化工具
  • 广州购物网站媒体资源网
  • 什么是网络营销品牌seo技术快速网站排名
  • 网站的优化哪个好抖音seo排名系统哪个好用
  • 动态网站开发案例精选开网店如何运营和推广
  • 青海网站开发站长推广网
  • 网站开发怎么样?凡科建站登录官网
  • 手机网站建设ppt168推广网
  • 商城属于电商网站吗足球队世界排名榜
  • 网站开发流程介绍优化方案电子版
  • 社区网站推广方案西seo优化排名
  • 做任务的兼职网站emlog友情链接代码
  • 网站竞价推广怎么做怎么联系百度客服
  • 济南个人网站建设巨量算数数据分析
  • 做公众号模板的网站北京网站推广营销服务电话
  • 南通做百度网站的公司线上广告接单平台
  • vue 做的网站新品怎么刷关键词
  • 温州乐清做网站的公司免费放单平台无需垫付
  • 北滘禅城网站建设网址seo查询
  • iis服务器的默认网站aso应用商店优化原因
  • dede网站模板怎么安装教程泉州百度推广咨询
  • 世界500强企业最新排名表沈阳网站推广优化
  • 做网站盘锦百度seo优化工具
  • 主机wordpress不能采集上海专业seo排名优化
  • dreamweaver 做网站seo干什么
  • 重庆建设工程招标龙斗seo博客