Java逻辑操作符与按位操作符

    操作符我们大家应该接触过不少 在Java中就有算数操作符,关系操作符,逻辑操作符,按位操作符,移位操作符等。其中有两种操作符我刚学的时候没有分清,那就是逻辑操作符与按位操作符。他们其实有个很像的地方,那就是它们都是与或非。而且操作符也很像,让我搞不明白,下面就开始分别介绍,之后对比两者的不同。

逻辑操作符

逻辑运算符有 与&&,或||,非!,这三种。要注意的是在Java中逻辑操作符只可以应用与布尔值,也就是它生成的都是布尔值。Java中逻辑表达式与C和C++语言很不同,也就是:不可以将一个非布尔值当作布尔值在逻辑表达式中使用 如if(1)break;,这虽然这在C语言里行的通,但在Java中你要这样写 if(true)break;。虽然这个代码并没有什么用,单纯为了测试而测试。可以这么说,在Java中布尔值与其他形如 int,byte等有十分明显的区分。而在C语言中 可以说0==false,1==true。

逻辑运算符的短路性质

短路由字面上理解,就是走更短的捷径,直接跳过后面的判断就输出结果,所以在Java中逻辑运算符的“与”和“或”在Java中又称为“简约与”和“简约或”。其实就是如果一个逻辑表达式没有计算完就可以判断出结果的话,它就会结束计算并判断结果。如if(false&&?)return 1;else return 2;(这的?表示不知道结果是true还是false),因为这里用的是&&,两旁1个为false则返回false 所以程序在看到了false时就返回了2。

按位运算符

按位运算符像逻辑操作符一样有与&,或|,非~,还有一个异或^。那么问题来了这里的与或非与上面的有什么区别吗?可以说它们的区别很大。按位运算符操作的是整数基本数据类型的”比特“。

1、“与”、“位与”(&)

        按位“与”操作符,如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0.

例1 5&4
        5的二进制是  0000 0000 0000 0101
        4的二进制是  0000 0000 0000 0100
        则结果是        0000 0000 0000 0100  转为十进制是4。

2、“或”、“位或”(|)

        按位“或”操作符,如果两个数的二进制,相同位数有一个是1,则该位结果是1,否则是0

  例2  5 | 4

5的二进制是  0000 0000 0000 0101
      4的二进制是  0000 0000 0000 0100
        则结果是        0000 0000 0000 0101  转为十进制是5。

3、“异或、“位异或”(^)

        按位“异或”操作符,如果两个数的二进制,相同位数只有一个是1,则该位结果是1,否则是0

  例3  5 ^ 4

5的二进制是  0000 0000 0000 0101
        4的二进制是  0000 0000 0000 0100
        则结果是        0000 0000 0000 0001 转为十进制是1

4、“非”、“位非”(~)也称为取反操作符

        按位“非”操作符,属于一元操作符,只对一个操作数进行操作,(其他按位操作符是二元操作符)。按位“非”生成与输入位相反的值,——若输入0,则输出1,若输入1,则输出0。

  例4  ~5

5的二进制是  0000 0000 0000 0101
        则~5是           1111 1111 1111 1010  转为十进制是 -6。

由上可知:其实逻辑运算符与按位运算符其实是两回事,不要搞混了。