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

java的位运算与移位运算实例研究

2017-07-25 23:39 162 查看
位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算,想要准备理解本节内容的话需要对二进制有基本的只是,如果你不是的话请出门左转。下面详细介绍每个位运算符。

1.与(&)运算符:

我们都曾学习过电路,这是高中物理就教过的知识,电路分为与或非,这里的“与”和我们要了解的与运算本质上是一样的,就是两个都满足返回true,否则就返回false。只不过在与运算里是两个操作数中位都为1,结果才为1,否则结果为0,代码如下:

public static void yu(){
int a = 8;
int b = 9;
print(a&b);
}

很明显这里打印的结果是8,想知道a&b到底发生了什么,我们首先需要将a和b转换为二进制,8转换为二进制是1000 ,9转换为二进制是1001,我们从低位开始进行与运算就能得到100,也就是8。那么如果a=-8会是什么样的结果呢?熟悉二进制的同学我相信已经有答案了,没错,-8转换为二进制为11111111111111111111111111111000,而9的最高位为0,所以最高位经过运算后是0,所以结果仍然是8。

2.或(|)运算符:

有了上面的铺垫,这个我们理解起来就简单了,就是两个操作数中位只要有一个是1,结果就为1,否则结果为0,代码如下:

public static void yu(){
int a = 8;
int b = 9;
print(a|b);
}

结果我们大家也能猜的到就是9,在正负数之间运算,简单地说就是有一个为负数,结果就是负数,否则就是正数。

3.非(~)运算符:

非运算符不需要在两个数值间作运算,它和正负数的“-”符号有点类似,是对单个数值做运算的,运算规则是,如果这个操作数的位上是1,那么就得到0,如果是0,那么就得到1,熟悉二进制的话也就是等于求这个数的反码,这里就不再贴代码赘述了。

4.异或(^)运算符:

异或运算符比较特殊,它的运算规则是两个操作数相同的位结果为0,不同就为1,代码如下:

public static void yu(){
int a = 8;
int b = 9;
//        print(Integer.toBinaryString(a));
print(a^b);
}


我们将1000与1001做异或运算得到的结果是0001,所以结果也就是1。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在java中的移位运算符则有左移(
<< )、右移( >> ) 和无符号右移( >>> )。

1.左移(
<< ) 运算符:

它的运算规则是将操作数的位向左移动,低位补0,代码如下:

public static void yu(){
int a = 9;
print(a << 2);
}

得到的结果是36,首先9转换为二进制是1001,当然了我这是简写,int类型一共有32位,我们把高位的0自动省略掉了,本程序是把9向左移动2位,那么就是100100,转换为10进制就是36;

2.右移(
>> ) 运算符:

它和左移运算符相反,是向右移动,如果该数为正,则高位补0,若为负数,则高位补1。

3.无符号右移( >>> )运算符:

>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0,大家可以自行运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: