位运算总结—各大公司笔试面试题
来源:互联网 发布:淘宝客服怎样登录 编辑:程序博客网 时间:2024/05/11 03:31
2012-10-31 19:50 140人阅读 评论(0) 收藏 举报
(1)对于位运算有五种运算:与、或、异或、左移和右移。这五种运算都要掌握。
(2)左移运算符m<<n表示把m左移n位。左移n位的时候,最左边的n位将被被丢弃,同时在最右边补上n个0。(在左移n位的时候,有些情况下,相当于原数乘以2的n次方)
(3)右移,对于无符号数,右移右边补0,对于有符号数,右移右边补符号位。(对于右移,任何情况下都相当于除)
(4)在笔试面试中最常考的题目:
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。
解法1:最常规的解法,通过移位运算来实现。思路就是判断某一位上是否是1。
解法2:把一个整数减去1,再和原整数做与运算,会把该整数最右边的一个1变成0(记住)。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。
注:两种解法的详细说明可以看《剑指Offer》这本书,很不错的书!
下面是两种解法的Java代码:
- package com.sailang.bitoperation;
- public class BitOperation
- {
- public static void main(String[] args)
- {
- BitOperation a = new BitOperation();
- int b = a.NumberOf1(0);
- int c = a.AnotherNumberOf1(-9);
- System.out.println(b);
- System.out.println(c);
- }
- //常规方法
- public int NumberOf1(int n)
- {
- int count = 0;
- int flag = 1;
- while(flag != 0)
- {
- if((n & flag) != 0)
- {
- count++;
- }
- flag = flag << 1;
- }
- return count;
- }
- //精妙解法
- public int AnotherNumberOf1(int n)
- {
- int count = 0;
- while(n != 0)
- {
- count ++;
- n = (n - 1) & n;
- }
- return count;
- }
- }
实例二:
- package com.sailang.bitoperation;
- /**
- * 用一条语句判断一个整数是不是2的整数次方
- * @author lizhongyi
- *
- */
- public class Test
- {
- public static void main(String[] args)
- {
- Test test = new Test();
- if(test.isSquareOf2(3))
- {
- System.out.println("是2的整数次方");
- }
- else
- {
- System.out.println("不是2的整数次方");
- }
- }
- public boolean isSquareOf2(int n)
- {
- return ((n - 1) & n) == 0 ? true : false;
- }
- }
实例三:
输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。比如10的二进制表示为1010,13的二进制表示为1101,需要改变1010中3位才能得到1101。
- 位运算总结—各大公司笔试面试题
- 位运算总结—各大公司笔试面试题
- 各大公司笔试面试题集锦
- 各大公司面试题总结
- 位运算面试题总结
- 位运算面试题总结
- 各大公司笔试面试题之数据结构与算法
- 各大公司笔试面试题之数据结构与算法
- 各大IT公司校招笔试面试题集锦
- 历年各大IT公司笔试面试题
- 剑指offer笔试面试题之——位运算
- 安全公司笔试面试题总结
- IT公司笔试面试题总结
- BAT及各大互联网公司前端笔试面试题--Html,Css篇(加上自我整理总结哟)
- 各大公司面试题
- 各大公司面试题
- 各大IT公司经典面试题总结
- 各大公司Java后端开发面试题总结
- java中serialVersionUID的作用
- SQL Server 和Oracle数据库用户的区别(一)
- Java EE 7中对WebSocket 1.0的支持
- heap和stack有什么区别
- android 后台运行服务之报告工作状态篇
- 位运算总结—各大公司笔试面试题
- MySQL死锁分析及解决的方法
- Android开发:实现带图片和checkbox的listview
- DSS RTSPSession::Run State Transfer (1)
- SQL Server 和Oracle数据库用户的区别(二)
- 【学习笔记】〖数据库〗ADO连接Access数据库程序换机器运行
- 在DIV中居中显示
- 关于串口编程的(一)
- Eclipse更新ADT22后,R.java文件无法自动生成的问题