位运算
来源:互联网 发布:java枚举类型有什么用 编辑:程序博客网 时间:2024/05/16 09:20
1、位运算类型及其含义:
含义Pascal语言C语言Java按位与a and ba & ba & b按位或a or ba | ba | b按位异或a xor ba ^ ba ^ b按位取反not a~a~a左移a shl ba << ba << b带符号右移a shr ba >> ba >> b无符号右移 a>>> b
2、位运算技巧
2.1 基本运算:乘2运算
int mulTwo(int n){//计算n*2
return n << 1;
}
2.2 基本运算:除2运算
int divTwo(int n){//负奇数的运算不可用
return n >> 1;//除以2
}
2.3 基本运算:乘2的m次方
int mulTwoPower(int n,int m){//计算n*(2^m)
return n << m;
}
2.4基本运算:除以2的m次方
int divTwoPower(int n,int m){//计算n/(2^m)
return n >> m;
}
2.5 高级应用:判断基数偶数
boolean isOddNumber(int n){
return (n & 1) == 1;
}
2.6 高级应用:交换两个数(不用临时变量)
a ^= b;
b ^= a;
a ^= b;
2.7 高级应用:判断两个数的符号是否相同
boolean isSameSign(int x, int y){ //有0的情况例外
return (x ^ y) >= 0; // true 表示 x和y有相同的符号, false表示x,y有相反的符号。
}
2.8 高级应用:判断一个数是不是2的幂
boolean isFactorialofTwo(int n){
return n > 0 ? (n & (n - 1)) == 0 : false;
/*如果是2的幂,n一定是100... n-1就是1111....
所以做与运算结果为0*/
}
2.9 某一位的读写:(取n的第m位)
int getBit(int n, int m){
return (n >> (m-1)) & 1;
}
2.10某一位的读写:将n的第m位置为1
int setBitToOne(int n, int m){
return n | (1 << (m-1));
/*将1左移m-1位找到第m位,得到000...1...000
n在和这个数做或运算*/
}
2.11某一位的读写:将n的第m位置为0
int setBitToZero(int n, int m){
return n & ~(1 << (m-1));
/* 将1左移m-1位找到第m位,取反后变成111...0...1111
n再和这个数做与运算*/
}
本文参考了相关资料,若侵权请告知即删除。
1 0
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 【置顶】博文精选
- 分享2016支付宝,财付通,微信免签约即时到账接口
- 24-mysql新安装如何修改密码
- DirectX SDK (June 2010) 安装图
- 2016.11.05 连续第三天总结
- 位运算
- 为MFC界面添加一个Log Window
- 有趣的Linux命令行功效
- 数据结构示例之带头节点的双向循环链表
- spring的声明式事物管理
- 8086逻辑运算和移位
- 2016.11.05 111
- Action中取得request,session的四种方式
- a case of table cell cover other cell