位运算符

本文深入探讨了位运算符的定义与应用,包括按位与、按位或、异或、取反、左位移与右位移等操作,并通过实例展示了其在二进制数据处理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

No.
逻辑运算符
描述
1
&
按位与
2
|
按位或
3
^
异或(相同0, 不同为1)
4
~
取反
5
<<
左位移
6
>>
右位移
7
>>>

无符号有位移

      常用位运算符 以及描述见上表。 需要指出的是上面的操作是针对2进制数

public class OperateDemo1 {
		public static void main(String[] args){
			operate();
			
			if(10==10||10/0==0){   //短路  不会出错
				System.out.println("条件满足") ;
			}
			
			if(10==10|10/0==0){  // 非短路 会报异常
				System.out.println("条件满足") ;
			}
		}
	/**
	 * 为了方便看出位运算符的作用,数据转为了 二进制输出
	 */
	static void operate(){
		boolean b = false;
		int x = 3;
		int y = 6;
		System.out.printf("%s & %s =  %s\n", Integer.toBinaryString(x),Integer.toBinaryString(y), Integer.toBinaryString(x&y));
		System.out.printf("%s | %s =  %s\n", Integer.toBinaryString(x),Integer.toBinaryString(y), Integer.toBinaryString(x|y));
		System.out.printf("%s ^ %s =  %s\n", Integer.toBinaryString(x),Integer.toBinaryString(y), Integer.toBinaryString(x^y));
		System.out.printf("b = %b, !b = %b\n", b, !b);
		// 3的二进制数据:	00000000 00000000 00000000 00000011
		// 6的二进制数据:	00000000 00000000 00000000 00000110
		//与:			00000000 00000000 00000000 00000010
		//或:			00000000 00000000 00000000 00000111
		//或:			00000000 00000000 00000000 00000101
	}
}
//结果 
11 & 110 =  10
11 | 110 =  111
11 ^ 110 =  101
b = false, !b = true
条件满足
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.lyne.chapter3.OperateDemo1.main(OperateDemo1.java:11)

     aaaaaaaaaaaa

        可以看到  对于与操作,是将 对应位置上的两个数字进行计算  可以因为 0 =false ; 1 =true,  那么 0&1 = 0;   0&0 = 0; 1&1 =1; 来获取结果数据。最终在转化为10进制数据。

         那么接下来聊一聊左移“<<” 以及 右移“>>”两种操作。

         左移操作是将运算数的二进制码真题左移指定位数, 左移之后的空位使用0来填充。

        右移操作“>>” 是将运算符的二进制码整体右移,右移之后空出来的位置以符号填充,如果是正整数使用“0”,反之用“1”。

public class OperateDemo1 {
        public static void main(String[] args){
            operate();
        }
    /**
     * 为了方便看出位运算符的作用,数据转为了 二进制输出
     */
    static void operate(){
        // 3的二进制数据:    00000000 00000000 00000000 00000011
        int x = 3;
        // -3的二进制数据:    11111111 11111111 11111111 11111101
        int y = -3;
        //                000000 00000000 00000000 0000001100
        System.out.printf("%d左移2位之后的内容:%d\n",x,(x<<2));
        System.out.printf("%d右移2位之后的内容:%d",y,(y>>2));
    }
}
//结果
//3左移两位之后的内容:12
//-3右移两位之后的内容:-1
分析图如下:

bbbbbbbbbbbbbbbbbbbb


至于结果,大家可以自己转化一下。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值