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

哈尔滨高端网页设计北京网站seo技术厂家

哈尔滨高端网页设计,北京网站seo技术厂家,网站触屏版,公司品牌推广方案位运算,顾名思义,运算时是对一个数对应的二进制数一位一位运算的,下面在确保你知道一些基础知识情况下进行总结而找出的一些例题。 题目 1:判断奇偶性 描述: 给定一个整数 n,不使用条件语句(如…

位运算,顾名思义,运算时是对一个数对应的二进制数一位一位运算的,下面在确保你知道一些基础知识情况下进行总结而找出的一些例题。

题目 1:判断奇偶性

描述
给定一个整数 n,不使用条件语句(如 ifswitch)和循环,判断其是否为偶数。

int isEven(int n) {return (n & 1) == 0;
}

按位与运算的原理是两个二进制的对应位都为一时为一,当一个数与一进行按位与运算时,由于一除了最低位为1以外,其他位都为0,因此,无论另一个数的非最低位的情况如何,在按位与的运算下都会变为0。也就是说,此时决定结果是最低位,而所有的偶数的最低位是0,只要知道与一按位与运算的结果是否为0即可判断是否为偶数。

题目 2:交换两个变量的值

描述
不借助第三个变量,交换两个整数 a 和 b 的值。

a = a ^ b;
b = a ^ b; // 此时 b = 原a
a = a ^ b; // 此时 a = 原b

按位异或有如下规律,a=a^0,a^a=0,我们可以使用这两条规律来交换。

a^=b;(a=a^b)

b^=a;(b=b^a=(代入上面的结果)b^(a^b)=a^(b^b)=a^0=a)

 a^=b;(a=a^b=(代入上面的结果)(a^b)^a=(a^a)^b=0^b=b)

题目 3:统计二进制中 1 的个数(汉明权重)

描述
给定一个无符号整数 n,返回其二进制表示中 1 的个数(汉明权重)。

int countOnes(unsigned int n) {int count = 0;while (n) {n &= (n - 1); // 消去最低位的1count++;}return count;
}

 一个数减去一在二进制上的体现是就是最低的一个1变为0,其后的所有0变为1,你可以在下面这个表中清晰的看到这个结果!其中,16->15和32->31最为明显!因为其他位没变,所以与未减之前的数按位与运算,这些位也不会变,例如:

20   0010100   &   19   0010011  =   16    0010000   

10   0001010   &     9   0001001  =     8    0001000

可以看到的是,前后二进制的变化只是少了个一,也就是说,每进行一次这样的运算,将会消去一个1,这样可以高效的求得汉明权重。

         1 00000012 00000103 00000114 00001005 00001016 00001107 00001118 00010009 000100110 000101011 000101112 000110013 000110114 000111015 000111116 001000017 001000118 001001019 001001120 001010021 001010122 001011023 001011124 001100025 001100126 001101027 001101128 001110029 001110130 001111031 001111132 0100000

题目 4:寻找缺失的数字

描述
给定一个包含 0 到 n 的数组,其中缺少一个数,其余数各出现一次,找出缺失的数。

int missingNumber(int* nums, int n) {int res = 0;for (int i = 0; i < n; i++) {res ^= i ^ nums[i];//等同于res^=i;res^=num[i];}return res ^ n;
}

 你需要知道是,0到n的数组大小为n,而0到n(包括n)有n+1个数,由于a^a=0,a^0=a,这两条性质,你可以想象的到,如果将一个数组的所有数字全部与同一个数按位与,我们先不算出结果,保持长计算式子,再将其与范围的每个数按位与,最后得到的计算式不断将相同的数按位与消去,留下的数就是单一,而这个单一的数来自范围里的数,是数组中缺少的。

题目 5:判断是否为 2 的幂

描述
给定一个整数 n,判断其是否为 2 的幂。

int isPowerOfTwo(int n) {return n > 0 && (n & (n - 1)) == 0;
}

由前面的例题可知,(n&(n-1))将会消去一个数的二进制中的最低的1,而2的幂在二进制上的体现为只有最高的1这一个1,你可以从这几个示例中看出。16:0010000   32:0100000   64:1000000因此,只要尝试消去一个1看结果是否变为0即可判断,当然,2的正整数幂不可能为负数,需要排除。

实践题

来源:小苯的与三角形

题目描述

小苯给定了一个正整数 x,他对三角形很感兴趣,因此他想要你构造一个严格小于x 的正整数 y(1<=y<x),使得 x,y,x and ⁡y这三个数字作为三角形的边长,可以构成一个非退化的三角形
但小苯觉得,如果任意构造一个y,那么问题有些过于简单了,因此他限制你要构造出最小的符合条件的y。
【名词解释】
非退化三角形是指满足三条边长均大于 0且任意两边之和均大于第三边的三角形。
本题中,and 用于表示按位与运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节 或 百度百科的相关章节。

输入描述:

每个测试文件均包含多组测试数据。第一行输入一个整数 T(1<=T<=10^5)T代表数据组数,每组测试数据描述如下:
在一行上输入一个整数 x(2<=x<=2×10^9),表示小苯给定的初始数字。

输出描述:

对于每组测试数据,新起一行。如果无解,直接输出一个−1;否则,输出一个正整数 y(1<=y<x),表示你构造的符合条件的最小 y。
我们可以证明,如果存在解的话,解是唯一的。

#include<stdio.h>
int main() {int num;scanf("%d", &num);while (num--) {int x, tag = -1;scanf("%d", &x);if ((x & (x - 1) ) != 0) {int count = 0;while (x > 1) {x >>= 1, count++;}tag=1<<count;}printf("%d\n", tag);}return 0;
}
http://www.dtcms.com/wzjs/215319.html

相关文章:

  • 做网站的桔子什么宁波seo网站服务
  • 西湖专业网站设计公司seo扣费系统
  • 重庆建设网站的公司必应搜索引擎怎么样
  • 网站开发预算如何在各大平台推广
  • 泉州网站建设平台杭州网站关键词排名
  • 郑州网站 建设搜索引擎seo推广
  • office做网站的软件seo优化排名易下拉软件
  • 做店招的网站网站快速搜索
  • html5网站开发前景网站建设主要推广方式
  • 做公司网站需要多长时间汕头seo全网营销
  • 做网站图片素材营销策划公司 品牌策划公司
  • 怎么根据别人的网站做自己的网站免费网站
  • 腾讯网页版qq登录入口电脑优化是什么意思
  • 最好看的免费网站源码网站做优化好还是推广好
  • 电子商务网站建设规划书百度top风云榜
  • 无忧网站建设报价百度搜索指数排名
  • 龙海网站定制it培训班
  • 电子商务网站设计原理真题北京推广
  • 网站源码有什么用怎样提高百度推广排名
  • 香港网购网站html期末大作业个人网站制作
  • 武汉新闻网官方网站晨阳seo顾问
  • 动态网站开发书籍怎样和政府交换友链
  • 做淘宝客必须建网站吗广州网络seo优化
  • 网站设计服务流程信息流广告投放工作内容
  • 天气网站建设事件营销的经典案例
  • 门户网站如何运营百度网盘登陆入口
  • 注册城乡规划师难考吗百度推广优化排名
  • 合肥市住房和城乡建设局网站宁波seo网络推广咨询价格
  • 网站免费建站系统 六广州新闻24小时爆料热线
  • 帝国cms手机网站nba最新交易消息