java的逻辑运算符和位运算符

逻辑运算符

 逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。逻辑运算符有:逻辑与(&&)、逻辑或(||)、逻辑非(!)、逻辑异或(^)、逻辑与(&)、逻辑或(|)。
@Test  
public void testLogic() {  
    // && 逻辑与 (短路) 对于a&&b 当a为false时,不需要判断b是否为false  
    System.err.println(false && true); // false  
    System.err.println(false && false); // false  
    System.err.println(true && true); // true  
    System.err.println();  
  
    // || 逻辑或(短路) 对于a||b 当b为true时,不需要判断b是否为true  
    System.err.println(false || true); // true  
    System.err.println(true || true); // true  
    System.err.println(false || false); // false  
    System.err.println();  
  
    // !逻辑非  
    System.err.println(!true); // false  
    System.err.println(!false); // true  
    System.err.println();  
  
    // ^ 逻辑异或 (相同为false,不同为true)  
    System.err.println(false ^ true); // true  
    System.err.println(true ^ true); // false  
    System.err.println(false ^ false); // false  
    System.err.println();  
  
    // & 逻辑与(不短路) 对于a&b 当a为false时,仍需要判断b是否为false  
    System.err.println(false & true); // false  
    System.err.println(true & true); // true  
    System.err.println(false & false); // false  
    System.err.println();  
  
    // | 逻辑或(不短路) 对于a|b 当a为true时,仍然需要判断b是否为true  
    System.err.println(false | true); // true  
    System.err.println(true & true); // true  
    System.err.println(false & false); // false  
    System.err.println();  
}  

位运算符

    位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。 
    位运算符共有7个,分别是:位与(&)、位或(|)、位非(~)、位异或(^)、右移(>>)、左移(<<)、0填充的右移(>>>)。
@Test  
public void testBit() {  
    // 位与(&) 和逻辑与类似  
    System.err.println(1 & 0); // 0  
    System.err.println(1 & 1);// 1  
    System.err.println(0 & 0);// 0  
    System.err.println();  
  
    // 位或(|)和逻辑或类似  
    System.err.println(1 | 0);// 1  
    System.err.println(1 | 1);// 1  
    System.err.println(0 | 0);// 0  
    System.err.println();  
  
    // 位非(~)  
    System.err.println(~0); // -1  
    System.err.println(~1);// -2  
    System.err.println();  
  
    // 位异或(^) 相同为0,不同为1  
    System.err.println(1 ^ 0);// 1  
    System.err.println(1 ^ 1);// 0  
    System.err.println(0 ^ 1);// 1  
    System.err.println();  
  
    // 右移(>>)右移数值变小,每移动一位数值减半  
    System.err.println(2 >> 1);// 1  
    System.err.println(2 >> 2);// 0  
    System.err.println(8 >> 1);// 4  
    System.err.println(8 >> 2);// 2  
    System.err.println();  
  
    // 左移(<<)左移数值变大,每移一位数值增倍  
    System.err.println(2 << 1);// 4  
    System.err.println(2 << 2);// 8  
    System.err.println(8 << 1);// 16  
    System.err.println(8 << 2);// 32  
    System.err.println();  
  
    // 0填充的右移(>>>)无符号,右边空出的位以0填充  
    System.err.println(8>>>2);//2    
    System.err.println(-14 >>> 2); //1073741820  
    /*(即二进制的 11111111 11111111 11111111 11110010), 
    向右移两位后等于 1073741820 (即二进制的 00111111 11111111 11111111 11111100)*/  
    System.err.println();  
}  


下面摘自另一博客:

位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。 
    位运算符共有7个,分别是:位与(&)、位或(|)、位非(~)、位异或(^)、右移(>>)、左移(<<)、0填充的右移,也叫无符号右移(>>>)。从表面上看似乎有点像逻辑运算符

但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。

 


1.位与运算符
与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。
public class data13
{
public static void main(String[] args)
{
int a=129;
int b=128;
System.out.println("a 和b 与的结果是:"+(a&b));
}
}
运行结果
a 和b 与的结果是:128
下面分析这个程序:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

 


2.位或运算符
或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0,下面看一个简单的例子。
public class data14
{
public static void main(String[] args)
{
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。

 


3.位非运算符
非运算符用符号“~”表示,其运算规律如下:

如果位为0,结果是1,如果位为1,结果是0,下面看一个简单例子。
public class data15
{
public static void main(String[] args)
{
int a=2;
System.out.println("a 非的结果是:"+(~a));
}
}

 


4.位异或运算符
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个简单的例子。
public class data16
{
public static void main(String[] args)
{
int a=15;
int b=2;
System.out.println("a 与 b 异或的结果是:"+(a^b));
}
}
运行结果
a 与 b 异或的结果是:13
分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值