java 位运算符

java 专栏收录该内容
77 篇文章 0 订阅

单位换算:
(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
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值