注:读《程序员面试笔记》笔记总结

1.知识点

运算 符号 说明
& 有0为0,都1为1
| 由1为1,都0为0
非(取反) ~ 0变1,1变0
异或 ^ 同为0,异为1
左移 << 高位移除,低位补零
右移 >> 低位移除,高位补0

1.1异或的性质

 a^a==
^a==a
a^b^b==b^a^b==a

2.面试题

2.1不使用变量交换两个值

 //method one
a = a - b;//save b message
b = a + b;//b= old a
a = b - a;
//method two
a = a ^ b;
b = a ^ b;//b= old a
a = a ^ b;

提示:利用位的运算性质

2.2计算二进制的1的个数

 //method one
for ( count = ; num != ; num=num >> ) {
if (num & ) {
count++;
}
}
//method two
for ( count = ; num != ; num &= num - ) {//每次消掉最后的一个1
count++;
}

提示:一个数与自身减一后与操作,会消除末尾的1,每次消除一个1

2.3将二进制数倒数第M位的前N位取反(比如M=2,N=4)

(1)将1左移N位(00000001=>00010000);

(2)将步骤一得到的数减1(00010000=>00001111);

(3)将步骤二得到的数左移M位(00001111=>00111100);

(4)得到的数字与原数字进行异或。

 int getNum(int num, int n, int m) {
int res = << n;
res--;
res = res << m;
return res ^ num;
}

2.4找出人群中的唯一单身狗(一个数组中唯一一个数出现一次,其余的数都出现过偶数次,求该数)

 int getSingleDog(int *a, int n) {
int res = ;
for (int i = ; i < n; i++) {
res ^= a[i];
}
return res;
}

提示:异或的性质b^b==0以及交换律

2.5(找出人群中三个单身狗中的任意一个)

 #define BITNUM 32
int getSingelNum_OneOfThree(int *a, int len) {
for (int i = ; i < BITNUM; i++) {
int countOdd = , countEven = ;
int resOdd = , resEven = ;
int tem = << i; for (int j = ; j < len; j++) {
if (tem & a[j]) {
countOdd++;
resOdd ^= a[j];
}
else {
countEven++;
resEven ^= a[j];
}
} if (countOdd & && resEven)//一组个数为奇数,另一组异或值不为零
return resOdd;
if (countEven & && resOdd)//一组个数为奇数,另一组异或值不为零
return resEven;
}
return -;
}

提示:按位从尾部根据0和1分成两组,当两组都有数,且偶数个的组所有值取异或不为零时,另一组取异或的值极为其中一个满足的值。

C++程序设计基础(7)位运算的更多相关文章

  1. JAVA程序开发按位运算的记录

    忘记在哪里看到一个面试题:把int a,b的值互换,不能使用临时变量.刚开始完全懵逼,脑子里面全是浆糊,不知道如何下手.查看答案后猛地一惊,心想居然还有这种操作,真是叹为观止,真的感觉自己的基础是如此 ...

  2. 我眼中的 Nginx(一):Nginx 和位运算

    作者张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技 ...

  3. 说说Java 位运算

    前言 我们都知道,在计算机世界里,再复杂,再美的程序,到最后都会变成0与1.也就是我们常说的:二进制.二进制相信大家都很熟悉.与现实世界不同的是,在现实世界里,我们通常都是用十进制来表示的,也就是遇十 ...

  4. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  5. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  6. 黑马程序员_毕向东_Java基础视频教程——位运算练习(随笔)

    位运算(练习) 最有效率的方式算出 2乘以 8等于几 2 << 3 = 2 * 2^3 = 2 * 8 = 16 对于两个整数变量的值进行互换(不需要第三方变量) class Test { ...

  7. C语言程序设计基础知识点概括

    C语言程序设计基础知识点概括 C语言程序设计基础知识点1.函数是C语言的基本构成单位.main函数是C语言程序的唯一入口.2.C语言程序开发过程. 编译过程:将以.c或.cpp结尾的源程序文件经过编译 ...

  8. Java程序设计基础项目总结报告

    Java程序设计基础项目总结报告 20135313吴子怡 一.项目内容 运用所学Java知识,不调用Java类库,实现密码学相关算法的设计,并完成TDD测试,设计运行界面. 二.具体任务 1.要求实现 ...

  9. Java程序设计基础作业目录(作业笔记)

    持续更新中............. Java程序设计基础笔记 • [目录] 我的大学笔记>>> 第1章 初识Java>>> 1.1.4 学生成绩等级流程图练习 1 ...

  10. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

随机推荐

  1. 以太坊系列之十七: 使用web3进行合约部署调用以及监听

    以太坊系列之十七: 使用web3进行智能合约的部署调用以及监听事件(Event) 上一篇介绍了使用golang进行智能合约的部署以及调用,但是使用go语言最大的一个问题是没法持续监听事件的发生. 比如 ...

  2. 十、Node.js-url模块

    下面使用之前提到过的note交互模式(可以在cmd直接执行js代码)进行学习url模块 跳出note模式同样是Ctrl+C(两次) 学习url模块主要是要掌握url模块的方法: url.parse() ...

  3. 2018数学建模国赛总结(A题/编程选手视角)

    2018数学建模已经告一段落了,先说说基本情况吧,我们队伍专业分别为:金融(A),会计(B),计算机(我),配置还算可以,他们俩会数据分析软件也会写论文,我可以写代码,画图.他们俩打过美赛(M奖),我 ...

  4. python基础之条件判断

    一.简单的if语句 举例 if money > 10000: print '我们去旅游吧' #左侧一定要有缩进,一般4个空格 print '请输入学生的考试成绩' score = print ( ...

  5. promise思考

    我写了三个单元块,分别对应三种业务场景 let query;query = (url) => { url=url||"传递的参数为空"; return new Promise ...

  6. 浅谈C#中的委托、事件与异步

    从刚接触c#编程到现在,差不多快有一年的时间了.在学习过程中,有很多地方始终似是而非,直到最近才弄明白. 本文将先介绍用法,后评断功能. 一.委托 基本用法: 1.声明一个委托类型.委托就像是‘类'一 ...

  7. ubuntu16.04 chromium浏览器无法启动

    点击浏览器不能启动,在终端输入: chromium -browser %U 错误如下: [/)] NSS_VersionCheck("3.26") failed. NSS > ...

  8. Dubbo基础配置

    服务启动检查配置 默认check=true dubbo:reference  check=“false” 关闭某个服务的启动时检查:(没有提供者时报错) dubbo:consumer  check=“ ...

  9. Bound Found(思维+尺取)

    Signals of most probably extra-terrestrial origin have been received and digitalized by The Aeronaut ...

  10. nodejs fs读取静态json文件

    let fs = require('fs'),stream = fs.createReadStream('./obd.json'),data = ""; stream.on('da ...