JAVA位运算详解

 

一、位移

1.0、位移基本概念

        这部分比较简单,相信大家已经很熟悉。

 

1.1、位移负数和超过32,64等的大数字位数的处理

       java中位移运算,移位的位数并不一定是位移符号后面的数字,准确的说是该数字的二进制表达式的最低5或者6个位所表示的值。所以最大值是31或者63。   

       移位运算,真正的只能作用于int和long,在java中分别是32位和64位表示。 我们可以对byte,char,short进行位移操作,这些类型位移运算的时候会转换为int类型。

       为了防止移位的值过大而没必要,所以采用只看移位数的二进制表达式的后5位或者6位。其中5位是对int进行移位,6位是对long型移位。而高于这些位数的字节都会被舍弃。

所以移位正数的值相当于,移位的位数%(取模)32或者64.(对正数如此)

       如  33       100001   结果为1       

33对应int是32位 取模就是1,所以移动33和移动1是相同。

移动负数的位数即移动 二进制表达式的后5位或者6位。

       如 -1         111111   结果相当与移动31位和63位

 

二、与(&)、或(|)、非(~)、异或(^)

与(&)

两个操作数中位都为1,结果才为1,否则结果为0

 

int a=15;
int b=2;
System.out.println("a 与 b 异或的结果是:"+(a^b));

运行结果
a 和b 与的结果是:128
下面分析这个程序:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。
 

 

 

 

或(|)

 

两个位只要有一个为1,那么结果就是1,否则就为0

 

int a=129;
int b=128;
System.out.println("a 和b 或的结果是:"+(a|b));

运行结果
a 和b 或的结果是:129
下面分析这个程序段:
a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。

 

 

 

非(~)

 

如果位为0,结果是1,如果位为1,结果是0   

 

int a=2;
System.out.println("a 非的结果是:"+(~a));

 

 

 

 

 

异或(^)

 

 

 

两个操作数的位中,相同则结果为0,不同则结果为1

 

int a=15;
int b=2;
System.out.println("a 与 b 异或的结果是:"+(a^b));

运行结果
a 与 b 异或的结果是:13
分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值