位运算

来源:互联网 发布: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
原创粉丝点击