JAVA的运算符

本文详细解析了Java中的自增自减运算、逻辑运算、位运算以及移位运算。通过实例展示了各运算符的工作原理和结果,包括‘++’、‘--’的前后置差异,‘&&’与‘&’,‘||’与‘|’的短路特性,以及位运算和移位运算在二进制补码表示下的计算过程。
摘要由CSDN通过智能技术生成

一、自增自减

1.后增:

先备份, 后自加 ,x 最终结果为 1。

 int x = 1;
 x = x ++;  
 System.out.println("x = 1,执行 x = x++ 后的结果为:"+ x);	//结果为 1

2.先增:

先自加 ,后备份,y 最终结果为 2。

int y = 1;
y = ++ y;   
System.out.println("y = 1,执行 y = ++y 后的结果为:"+ y);		//结果为 2

3.多个变量 ,自增、自减 的 混合运算:

int m = 1;
int n = 2;
int sum = m++ + ++n - n-- - --m + n-- - --m;
System.out.println("m=1,n=2,执行 sum = m++ + ++n - n-- - --m + n-- - --m 后:");
System.out.println("m = "+ m);   //m=0
System.out.println("n = "+ n);   //n=1
System.out.println("sun = "+ sum);//sum=2

4. “a += 2” 和 “a = a + 2” 的区别 :

会报错 ,如图:
在这里插入图片描述
正确写法 ,如下:
在这里插入图片描述

二、逻辑运算

‘&&’ 和 ‘&’ , 以及 ‘||’ 和 ‘|’

相同点: 单符号逻辑运算符 和 双符号逻辑运算符 的运算结果相同。
不同点: 双符号运算时,若第一个表达式的结果可以确定最终结果,就直接返回结果。

例:

System.out.println("(3>2) && (3>4)的结果为:"+ ( (3>2) && (3>4) ) );	//结果为:false
System.out.println("(3>2) &  (3>4)的结果为:"+ ( (3>2) &  (3>4) ) );	//结果为:false
System.out.println("(3>2) || (3>4)的结果为:"+ ( (3>2) || (3>4) ) );	//结果为:true
System.out.println("(3>2) |  (3>4)的结果为:"+ ( (3>2) |  (3>4) ) );	//结果为:true

三、位运算

位运算 的 运算方式:
将 操作数 变为 二进制数 补码, 然后 逐位运算,
最后将 二进制结果 转换为 十进制真值 返回。

例:
System.out.println("- 3 & 7 的结果为: "+ ( -3 & 7 ) );	//结果为:+5
System.out.println("- 3 | 7 的结果为: "+ ( -3 | 7 ) );	//结果为:-1
System.out.println("- 3 ^ 7 的结果为: "+ ( -3 ^ 7 ) );	//结果为:-6
System.out.println("- 3 按位非运算 的结果为:"+ (~ -3));	//结果为:+2
解释说明:

-3 的 二进制数为:1 011,补码 为:1 101;
7 的 二进制数 为:0 111,补码 为:0 111。
二者补码分别为: 1 101 和 0 111
按位 与 运算,结果为:0 101(补码)
按位 或 运算,结果为:1 111 (补码)
按位 与运算 和 按位 或运算 的真值分别为:
与运算 结果:0 101(补码)——> 0 101(原码)——> +5(真值)
或运算 结果:1 111(补码)——> 1 001(原码)——> - 1(真值)
二者 异或:
结果 为 : 1 010(补码)——> 1 110(原码)——> - 6(真值)
-3 的 非运算:
-3 的 二进制数为: 1 011,
补码 为:1 101,按位取非后 为: 0 010 。
故:0 010(补码)——> 0 010(原码)——> +2(真值)

四、移位运算

运算方式:

无论正负,计算机均存储该数据的 补码形式。

  • 1>.左移 运算符 << :最后面 补0, 返回结果 等于原数 乘以 2。
  • 2>.右移 运算符 >> :最前面 补符号位,返回结果 等于原数 除以 2。
  • 3>.无符号右移 >>> :最前面 均 补0。

例:

System.out.println("-8 <<  1 = "+ ( -8 << 1) );	//结果为:-16
System.out.println("-8 >>  1 = "+ ( -8 >> 1) );	//结果为:-4
System.out.println("-8 >>> 1 = "+ ( -8 >>> 1));	//结果为:+2147483644

五、程序源码

public static void main(String[] args) {

        /**
         * 1. 自增运算
         */
        int x = 1;
        x = x ++;   //先备份,后自加,x最终结果为1。
        System.out.println("x = 1,执行 x = x++ 后的结果为:"+ x);

        int y = 1;
        y = ++ y;   //先自加,后备份,y最终结果为2。
        System.out.println("y = 1,执行 y = ++y 后的结果为:"+ y);


        /**
         * 2. 多个变量 自增、自减 的 混合运算
         */
        int m = 1;
        int n = 2;
        int sum = m++ + ++n - n-- - --m + n-- - --m;
        System.out.println("\nm=1,n=2,执行 sum = m++ + ++n - n-- - --m + n-- - --m 后:");
        System.out.println("m = "+ m);   //m=0
        System.out.println("n = "+ n);   //n=1
        System.out.println("sun = "+ sum);//sum=2

        /**
         * 3.  “a += 2” 和  “a = a + 2” 的区别
         */
        byte a = 1;
        a += 2;
        a = (byte) (a + 2);//不强制转换,会被报错
        System.out.println(a);


        /**
         * 4.  逻辑运算。
         * '&&' 和 '&' , 以及 '||' 和 '|'
         * 相同点: 单符号逻辑运算符 和 双符号逻辑运算符 的运算结果相同。
         * 不同点: 双符号运算时,若第一个表达式的结果可以确定最终结果,就直接返回结果。
         */
        System.out.println("(3>2) && (3>4)的结果为:"+ ( (3>2) && (3>4) ) );
        System.out.println("(3>2) &  (3>4)的结果为:"+ ( (3>2) &  (3>4) ) );
        System.out.println("(3>2) || (3>4)的结果为:"+ ( (3>2) || (3>4) ) );
        System.out.println("(3>2) |  (3>4)的结果为:"+ ( (3>2) |  (3>4) ) + "\n");


        /**
         * 5.位运算:
         * 是将操作数变为 二进制数 补码, 然后 逐位运算,
         * 最后将 二进制结果 转换为 十进制真值 返回。
         */

        /**
         * 解释说明:
         * -3 的 二进制数 为:1 011,补码 为:1 101;
         *  7 的 二进制数 为:0 111,补码 为:0 111。
         *  二者补码分别为:     1 101    和       0 111
         *
         * 按位 与 运算,结果为:0 101(补码)
         * 按位 或 运算,结果为:1 111 (补码)
         * 按位 与运算 和 按位 或运算 的真值分别为:
         * 与运算 结果:0 101(补码)——> 0 101(原码)——> +5(真值)
         * 或运算 结果:1 111(补码)——> 1 001(原码)——> - 1(真值)
         *
         * 二者 异或:
         * 结果 为 : 1 010(补码)——> 1 110(原码)——> - 6(真值)
         *
         * -3 的 非运算:
         * -3 的 二进制数为: 1 011,
         * 补码 为:1 101,按位取非后 为: 0 010 。
         * 故:0 010(补码)——> 0 010(原码)——> +2(真值)
         */
        System.out.println("- 3 & 7 的结果为: "+ ( -3 & 7 ) );//结果为:+5
        System.out.println("- 3 | 7 的结果为: "+ ( -3 | 7 ) );//结果为:-1
        System.out.println("- 3 ^ 7 的结果为: "+ ( -3 ^ 7 ) );//结果为:-6
        System.out.println("- 3 按位非运算 的结果为:"+ (~ -3) + "\n");//结果为:+2


        /**
         * 6. 移位运算:
         * 无论正负,计算机均存储该数据的 补码形式。
         * 1>.左移 运算符  <<  : 最后面 补0,    返回结果 等于原数 乘以 2。
         * 2>.右移 运算符  >>  : 最前面 补符号位,返回结果 等于原数 除以 2。
         * 3>.无符号右移  >>>  : 最前面 均 补0。
         */
        System.out.println("-8 <<  1 = "+ ( -8 << 1) );//结果为:-16
        System.out.println("-8 >>  1 = "+ ( -8 >> 1) );//结果为:-4
        System.out.println("-8 >>> 1 = "+ ( -8 >>> 1));//结果为:+2147483644

    }
weixin151云匹面粉直供微信小程序+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值