java 位运算符

单位换算:
(1.)bit:位
一个二进制数据0或1,是1bit;

(2.)byte:字节
1 byte = 8 bit , 存储空间的基本计量单
一个英文字符占一个字节;

(3.)1 字母 = 1 byte = 8 bit
一个汉字占2个字节;
1 汉字 = 2 byte = 16 bit

常见的位运算符有

&(与)、|(或)、^(异或)、~(取反)、<<(左移)、>>(右移)、>>>(无符号右移)。

关于位运算符参考文章
Java 位运算符 &、|、^、~、<<、>>、>>>
Java位运算原理及使用讲解

位运算符对二进制数据进行处理,加减乘除适用于十进制,而位运算就是二进制的运算。

一.用&判断一个数是奇数还是偶数:
n&1为1则是奇数,为0则是偶数

        n&1 == 1?”奇数”:”偶数”

二.用 << 计算乘法m*2^n。左移运算符相当于乘2,即每左移一位,则变为原来的2倍

如(1): 12 << 1 的意思就是12向左移动一位

      12的二进制是:     00001100
      左移一位后二进制是:00011000,转化为十进制是24

同理,12 << 3的意思就是12向左移动三位,即12 *2 *2 *2。

三.用 >> 计算除法,这个跟左移运算大体是一样。右移运算符相当于除2,即每右移一位,则变一半。
12 >>1即12/2

      12的二进制是:     00001100
      右移一位后二进制是:00000110,转化为十进制是6

注意:当被除数为奇数时会取整。
13>>1即13/2,右移后13的二进制最后一位1被移出,所以结果是6

      13的二进制是:     00001101
      右移一位后二进制是:00000110,转化为十进制是6

四、使用^来进行两个数的交换,不需要用到临时变量。

      int x = 1234;
      int y = 7951;

      x ^= y;
      y ^= x;
      x ^= y;

五、使用~取相反数

    int x = 1234;
    int y = ~x+1;

六、求平均数
对于两个整数x,y,如果用 (x+y)/2 求平均值,会产生溢出,因为 x+y 可能会大于INT_MAX,但是我们知道它们的平均值是肯定不会溢出的,我们用如下算法:

   int average(int x, int y) {    
    return (x&y)+((x^y)>>1); 
} 

七、求绝对值

int abs( int x )
{
	int y ;
	y = x >> 31 ;
	return (x^y)-y ;     //或者: (x+y)^y
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值