您的位置:首页 > 编程语言 > Java开发

Java中的位运算

2015-11-24 13:51 399 查看
要搞清楚移位运算,首先要搞清楚字节数。Jvm保证了原始类型的字节数不受操作系统影响,无论是16位,32位或64位操作系统。

boolean 1 位,char 16 位 我们常说的一个字符占两个字节,byte 8 位 即一个字节short 16 位,int 32 位,long 64 位,float 32 位,double 64 位。

一般数值都是带符号的,从左往右数,数值类型的第一位是表示正负的,0为正1为负。

*要获得一个负数的二进制表示:用正数值按位取反再加一(注意这里的加一不是负数计算中的加一,就是正数的加一)表示负数值。例如int i=1;实际上就是:

0….00001(int是32位,前面有31个0),而-1实际上是1按位取反::1….11110(31个1)::再加一::1….1111(32个1)

*要获得一个负数形式的二进制表示的十进制值,也是除了第一位符号位外其它位都按位取反再加一,然后加上负号。

弄清楚了各种类型的字节数已经正负符号,所有的位运算操作符就变得简单了。

一、按位运算:对二进制位(bit)进行布尔代数,并得到结果。

按位运算一般来说只处理整数。(short,int,long)。如果一个小类型与一个大类型运算,小类型自动补齐大类型所需要的位数。

&两个bit都是1,则结果是1,否则都是0。-1&1=1

|两个bit都是0,则结果是0,否则都是1。-1|1=-1

异或^两个bit不一样,则结果是1,否则是0。-1^1=-2

非~,只对一个bit进行运算。~-1=0

二.移位运算 将二进制向一个方向移动给出的位数。

a<<2,表示将a的二进制表示向左移动两位,低位补0。在没移出去的情况下(要是int类型左移32,那就完全移出去了,得到32个0),左移一位表示乘以2。

a>>10表示向右移动十位,若a为正,则高位补0,若为负则补1。 右移不存在移出去的问题,右移就表示除以2取整。

>>>无论正负高位都补0。

位运算可以用来做Hash

static int hash(int paramInt)

{

paramInt ^= paramInt >>> 20 ^ paramInt >>> 12;

return (paramInt ^ paramInt >>> 7 ^ paramInt >>> 4);

}

现在应该能看懂这个hash函数在干嘛了吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 位运算