Java基础 位运算

来源:互联网 发布:mac电脑怎么装exe软件 编辑:程序博客网 时间:2024/06/09 13:12


1.按位与运算符(&)--主要讲述正数,负数只讲一例

 5&6 =?

先转换成二进制数:

5 = 0000 0101; 

6 = 0000 0110;

按位与是:各位数都为1就取1;不然就取0;所以结果是: 0000 0100 =4;

负数要先取它的补码:例如:5& -6 =?

   5 =      0000 0101 ;(原码、补码、反码都为它)

-6原码:1000 0110;

-6反码:1111 1001;

-6补码:1111 1010;(反码加1) 5& -6 = 0000 0000 =0;


2.按位或运算符(|)

5|6 =?

先转换成2进制数

5= 0000 0101

6= 0000 0110

按位或是:只要参与运算数位有一个为1,这个位置就取1;所以5|6=0000 0111 =7;


3.取反运算符(~)

~5 =?

5 =  0000 0101;

~5 =1111 1010;(因为在计算机中负数是按补码形式存储,所以这是个补码,要算出它的原码)

反码 =补码-1 = 1111 1001;

原码 = 反码除最高位取反 = 1000 0110 =-6;

所以~5 = -6;

4.异或运算符(^ )

5^6:参与运算数位相同则取0,不同则取1

5 =      0000 0101;

6 =      0000 0110 ;

结果:0000 0011 =3;


5. 左移运算符(<<)

a<<b即a向左移b位,右边补0,左边的2进制位丢弃;

5<<2  : 5= 0000 0101左移2位得 0001 0100 = 20; 一般结果是:a<<b = a*(2^b),即5<<2 =5* 2^2 =5*4= 20


6.右移运算符(>>)

a>>b 即a向右移b位,正数左边补0,负数左边补1,右边丢弃;


结果 = a/(2^b)去整数;


7.无符号右移运算符(>>>)

a>>>b,a向右移b位,左边空出的位用0来填充,移出右边的被丢弃