自增自减运算符、初识Math类、逻辑运算符及位运算符

 

1、自增自减运算符(一元运算符)

  1. 自增++

    • ++放置的位置不同,表达的含义不同,先看如下的案例

       

       

    • 定义3个变量,a直接赋值为3,b赋值为a++c赋值为++a

    • 分别输出3个变量的值,a=5,b=3,c=5

    • a++++a的含义,都是a = a + 1,区别在于计算的时机不同,也是导致bc的值输出后相差2的原因

    • a++先让a先参与所在代码的运行,然后再自增,++a先自增1,再参与所在代码的运行

    • a的初始赋值为3,代码的运行结果是为b赋值,先参与运行后自增,即先为b赋值3,然后再自增1,所以最后b输出的值是3,但输出之后,a实际的值已经为4

    • ++a则刚好相反,先自增1,然后再参与代码运行。程序是由上往下依次执行,在上一步为b赋值,之后自增1,a的值已经变成了4,++a先让a的值自增1,再运行代码赋值给c,即c的值已经是5,所以c输出的值为5

    • 下图的验证方法,可以验证上述的理论

    • 在b = a++代码下面插入一行代码,在为b赋值之后,立刻输出a的值

    • 可以看到此时输出的值为4,由此印证了上述的理论,a++是先参与运行代码,将a初始定义的值3赋值给b,所以b的值输出为3,然后再执行a = a + 1,此时a的值变为4,相当于a++是在int b = a++代码下面,自动加了一行隐藏的a = a + 1

    • 而++a则相反,先执行自增a = a + 1,因为上一行代码int b = a++已经让a的值自增为4,所以此时a的值已经是5了,然后再执行代码,将a的值赋值给c,所以c的值输出为5,相当于++a是在int c = ++a代码上面,自动加了一行隐藏代码a = a + 1

  2. 自减--的定义和理论和++一摸一样,只是功能从自增1,变成了自减1,其余的特性完全相同

     

2、Math类

  1. Java中,class表示类,然而很多的操作都需要用工具类来实现

  2. Math就是经常用于计算的一个工具类

  3. 如下图,当我们需要进行幂运算(即求某个数字的多少次方的运算)时,可以使用Math工具类很方便的实现

     

     

  4. 输入Math. ,可以看到很多用于计算的关键字,然后选择pow,并在括号里输出2,3,即求2的3次方是多少,然后创建对象pow,赋值为Math.pow(2,3); 之后输出pow的值,可以看到运算的结果为8

  5. 上述的步骤可以简化为,如下图

     

     

     

  6. Math.pow(2,3);这一行按住Alt + Enter,会出现一个选项,鼠标点击一下选项,就可以直接变为double pow = Math.pow(2, 3);

  7. 或者是在Math.pow(2,3);这一行按住Alt,然后连续敲两次回车键,也可以直接变为double pow = Math.pow(2, 3);

     

3、逻辑运算符

  1. 逻辑运算符有:与(&&)、或(||)、非(!)三种

  2. 与运算相当于and,每个部分的结果都为真,则最终结果为真,否则为假

  3. 或运算相当于or,只要有一个部分的结果为真,则最终结果为真,否则为假

  4. 非运算相当于取反,如果结果为真,则为假,如果结果为假,则为真

  5. 逻辑运算符的输出结果都是真或者假,所以定义逻辑运算符的变量,需要用到布尔值(boolean)数据类型

  6. 如下图,定义两个变量a、b,a变量赋值为true(真),b变量赋值为false(假),然后分别进行与运算,或运算,非运算

     

     

  7. 由上图可知,a为true,b为false,a && b,是真 与 假,并非所有的结果都为真,所以返回false;a || b,是真 或 假,有一个结果为真,所以返回true;!( a && b ),是a && b的结果取反,a && b的结果为false,所以取反的结果为true。

  8. 短路运算

     

     

  9. 定义2个变量c和d,为int类型的c赋值5,boolean类型的d等于(c<4)&&(c++<4),并且分别输出d和c的值

  10. 执行代码得到的结果如上图,d的值为false,因为c的值为5,&&是与运算,每个结果都为真,输出才为真,而第一个判断c<4是错误的,一个结果为假,与运算的结果就为假,则d的值就为false,而第二个判断是c++<4,如果执行了这一步,则c的值会在参与代码运行后+1,c的值本来为5,+1则为6,但实际上我们可以看到最终输出c的值仍然是5,说明c++<4这个部分的代码根本就没有执行,这就是所谓的短路运算

  11. 短路运算,当一行逻辑运算中某个判断已经可以决定这行代码的结果时,程序就不会继续运行这行代码之后剩余的部分了,而是直接中断运行,保留这行代码的判断结果,继续执行下一行代码

     

4、位运算

  1. 位运算符同样有与、或、非、取反:& 、| 、 ^ 、 ~

  2. 定义2个位变量A和B,A = 0011 1100;B = 0000 1101

  3. 与运算:A和B的值的每一位相比较,都为0则是0,都为1则是1,如果分别为0和1,则是0

  4. 或运算:A和B的值的每一位相比较,都为0则是0,其中一个为1,则是1,都为1,也是1

  5. 异或:A和B的值的每一位相比较,相同则为0,不同则为1

  6. 取反:B的每一位的值都取反,0则为1,1则为0

    如下图

     

     

     

5、进阶(位运算实际应用)

  1. 2*8=16,如何运算最快

    • 可以拆分为2 * 2 * 2 * 2,但这样不是最快

    • 可以用到左移(<<)、右移(>>)

    • 意思是将数字1,在2进制的位中向左或者向右移动,如下图,每向左移动一位,则表示的值越大

       

       

    • 例如System.out.println(2<<3),是表示将2(也就是0000 0010)中的1,往左边移动3位,变成了0001 0000,也就是16

    • 所以左移<<,就相当于* 2

    • 右移>>,就相当于/2

  2. 注意:因为左移右移是直接和系统底层的二进制打交道,所以效率极高 

 

 

 

posted @   零和一的浪漫  阅读(238)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示