面试之路(26)-面试相关的位运算总结
来源:互联网 发布:蚌埠学院网络 编辑:程序博客网 时间:2024/06/13 22:02
java的位运算介绍:
Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。
- 左移低位补零
- 正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行部位(自然而然的,就由负数变成了正数了)
面试题举例:
实现函数,输入一个整数,求二进制表示中1的个数?
解法一:(避免死循环)
思路分析:
首先想到将n循环右移,和1做与运算。考虑n’是负数的情况,右边补1,会出现死循环。
所以采用将1左移和n做位运算
int numberOf1(int n){ int count = 0; int flag = 1; while(flag != 0){ if(flag & n != 0){ count++; } flag = flag << 1; } return count;}
优雅的解法:
思路分析:
一个数不等于0,那么至少有一位是1,假设最右边那位是1.
减一之后,最后一个1变成0,后面的0变为1,不是一个1的也是这种情况。
举个例子,1100,减一1011,。一个数字和它的减一做位运算,相当于把他的最后边的那个1,变成0.
代码
int numberOf1(int n){ int count = 0; while( n != 0){ count++; n = n & (n-1); } return count;}
相关的面试题:
一:
判断一个数字是不是2的整数次方?
思路:
2的整数次方,二进制中只有一个1
二:
输入两个数字m,n,需要改变m的多少位,才能得到n?
思路:
先异或,后判断结果中1的数目
位运算总结:
一个数和它的减一数字,做位与,相当于把这个数字二进制最右边的1变为0.这个思路可以解决很多的问题
我的微信二维码如下,欢迎交流讨论
欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!
微信订阅号二维码如下:
参考博客链接:
http://blog.csdn.net/xiaochunyong/article/details/7748713
剑指offer
2 1
- 面试之路(26)-面试相关的位运算总结
- 面试相关之位运算
- 剑指Offer之面试位运算总结
- 高效面试之位运算
- 有关面试中常见位运算总结
- 笔试面试中涉及位运算的题目总结(一)
- PHP之位运算(入门基础,面试题目基础)
- 面试相关的一些总结
- 位运算相关总结
- 位运算相关总结
- spring面试相关总结
- Android 面试相关总结
- Activity相关面试总结
- TCP面试相关总结
- java面试中常用到的位运算符解析
- 笔试面试中常见的位运算用法
- 面试相关之树
- 面试之Spring相关
- Linux(centos)操作技巧汇总----->持续更新中
- ionic build ios 没有任何输出和响应
- LeetCode 292 Nim Game
- SDWebImagePrefetcher 类的引用
- Javascript中new Date的坑
- 面试之路(26)-面试相关的位运算总结
- 获取用户原始IP地址
- 经典 Spring 面试题和答案
- 深入理解Java的接口和抽象类
- easyui-DataGrid基本用法
- 栈的应用之中缀表达式转后缀
- Python3使用requests模块显示下载进度
- C++中的随机数函数
- KMP模板(2203)