首页 > 其他分享 >Day7 运算时脑子有点烧

Day7 运算时脑子有点烧

时间:2024-05-09 17:11:06浏览次数:22  
标签:脑子 自增 运算 ++ Day7 System println out

Day7 运算时脑子有点烧2.0

本节课关于运算符进行了一些补充,主要有三块内容

自增与自减

我们先来看一段代码

public class Demo04 {
    public static void main(String[] args) {
        //自增++、自减--,一元运算符,非常重要!
        int a = 3;
        int b = a++;
        //隐藏了一行代码,即a=a+1,执行完这行代码后,a会+1,它是先给b赋值,再自增,所以b还是3,但是之后a变成4

        System.out.println(a);
        int c = ++a;
        //隐藏了一行代码:a=a+1,但是由于++在前,所以是先自增从4变成5,再给c赋值,
        //所以这里c会变成5,而此时在经过两次自增后,a也已经变成了5

        System.out.println(a);//
        System.out.println(b);
        System.out.println(c);

        //同理a--和--a

        //幂运算 (很多运算会使用工具类来操作)
        double pow = Math.pow(3, 2);
        System.out.println(pow);



    }
}

其结果为

image-20240509163715264

什么意思呢?自增自减的意思(++、--)非常简单,就是在自身的基础上加1,比如原先a=3,在自增后a=4,但是这个自增的时间点是有差别的,比如a++(++在后面)会在整个式子执行后,为a加上1,这个情况下如果进行赋值,则赋值会发生在自增之前,即b=a++,若这个式子被执行,b就会先被赋值,此时b=3,执行后a会自增,此时a=4;

如果是++a(++在前)那么此时执行后自增会发生在赋值之前,c=++a,a会先自增,此时a=5,再赋值给c,此时c=5。

同时还介绍了关于幂运算的知识,这里的幂运算是借助Math的数学工具类来进行的,可以理解为在编程里设定好计算器,其背后也有一套源码,这里暂不深究。

逻辑运算

此部分介绍了逻辑运算符的相关内容,在boolean值的基础上,我们先看一段代码

package operator;

//逻辑运算符
public class Demo5 {
    public static void main(String[] args) {
        //与(and) 或(or) 非(非你即我)
        boolean a = true;
        boolean b = false;

        System.out.println("a && b:"+(a&&b));//逻辑“与”,两个变量都为true,则结果为true,通过加号与字符串结合起来
        System.out.println("a || b:"+(a||b));//逻辑“或”,两个变量一个为true,则两个都为true,同时两个都为false,结果才为false
        System.out.println("!(a && b):"+!(a&&b));//“非”(取反),如果是真则为假,如果是假则为真

        //短路运算
        int c = 5;
        boolean d = (c<4)&&(c++>4);
        System.out.println(d);
        System.out.println(c);
        //1.由于在这个式子里,c<4一定是false在前,所以逻辑运算中,前一个为假
        //则这个逻辑与运算一定为假,它会直接跳过“与”后面的变量直接判断假
        //所以这里c++的自增根本没有被执行,而是被跳过了。这就是短路运算。



    }
}

这里介绍了三种逻辑运算符:&&||

分别为:“与”(and)、“或”(or)、“非”(取反)

上面这段代码的运算结果为:

image-20240509165234754

在这里,a为真,b为假

&&是只有两者都为真,结果才为真

||是两者都为假,结果才为假,也即只要一项为真,那结果就为真

!取反后自然就是原先结果为假,那么取反结果为真

  • ps,这里还介绍了所谓的短路运算,在进行逻辑运算的时候是依序进行的,例如在&&中,若比对的前一项为假,那么就无需比对,直接为假,会略过执行后一项,这里的后一项是c++,在执行后c会自增,本应c=5+1=6,但很显然c完全没有经过自增依然为5,可以得知此项没有被执行,这就是短路运算。

位运算(面试题)

这里还介绍了一下面试可能会遇到的位运算题目,我们来看代码:

package operator;

public class Demo06 {
    public static void main(String[] args) {
        /*
        位运算(面试题)
        A = 0011 1100
        B = 0000 1101

        A&B = 0000 1100(两个都是1,才能使1)
        A|B = 0011 1101(两个都是0,才能为0,否则都是1)
        A^B = 0011 0001 (两个相同才为0,否则为1)
        ~B = 1111 0010(就是简单的取反,原来为1则现在为0)

        2x8 = 16   2*2*2*2
        << >>左移和右移

         */
        System.out.println(2<<3);

        /*
        左移和右移的逻辑其实是二进制的位数计算
        比如0是0000 0000
        1是0000 0001
        那么2是0000 0010
        以此类推8是 0000 1000
        而十六就是 0001 0000
        其实就是将1的位置左移了3位,所以直接就得出结果了
        所以其实<<就是*2,而>>就是/2
         */
    }
}

位运算由于借助2进制,其本质上也变成了某种程度上的逻辑运算,依靠比对来进行:

&的含义是两者都为1,结果才为1

|的含义是两者都为0,结果才为0

^的含义是两者要相同才能为0,否则为1

~就是单纯的取反,原先是0现在是1,反之亦然

在这里会有一类考题,如何快速运算2的倍数运算?

如2*8=16如何实现,依靠位运算非常简单

如1在二进制是0000 0001

而2在二进制是0000 0010

而4在二进制是0000 0100

可以看出*2即为1的位置向左移一位,而/2则为1的位置向右移一位

这两个计算正好对应着<<(左移)和>>(右移)两个运算符,可以非常方便地利用底层二进制逻辑计算类似的内容。

这里的2<<3其实就是2 * 2 * 2,在二进制层面上就是1的位置左移三位,挺好玩的。

标签:脑子,自增,运算,++,Day7,System,println,out
From: https://www.cnblogs.com/iwanttoberipped/p/18182732

相关文章

  • 用户交互、算术运算符、流程控制语句
    用户交互【一】程序与用户之间交互学用户交互的目的就是为了和程序之间交流【二】python中如何交互【1】输入input语法(1)弹出输入框input()(2)提示信息print("请输入用户名")input()(3)提示输入信息并且获取到输入的信息username=input("请输入用户名:》》》")print(u......
  • Python基础之基本运算符
    【一】参考网站菜鸟教程:https://www.runoob.com/python/python-operators.html【二】算数运算符python支持的算数运算符与数学的运算符号是一样的#【1】加法运算符a=3b=4c=a+bprint(c)#输出7#【2】减法运算符a=3b=4c=a-bprint(c)#......
  • 位运算骚操作
    位运算骚操作异或操作异或运算性质1)异或运算就是无进位相加2)异或运算满足交换律、结合律,也就是同一批数字,不管异或顺序是什么,最终的结果都是一个3)0^n=n,n^n=04)整体异或和如果是x,整体中某个部分的异或和如果是y,那么剩下部分的异或和是x^y骚操作交换两个数voidexchange(......
  • excel 汇总运算后生成柱状图
    defsum(df,q_name,sum_index):#df=pd.DataFrame#pd_frame.sum()#print(df.values)#Aggregations(聚合),多索引,,'季度'df_agg=df.groupby(['厂家','季度'])['销量'].agg([np.sum])......
  • 2024ICPC武汉邀请赛-G.Pack-数论分块、整除运算相关的不等式
    link:https://codeforces.com/gym/105143Groupcontests:https://codeforces.com/group/DWEH34LQgT/contest/521901题意:有\(n\)件\(A\)物品,\(m\)件\(B\)物品,两种物品价值分别是\(a,b\),若干件\(A\)和若干件\(B\)可以打包成一个商品,打包尽可能多的商品的情况下让剩余的......
  • ETL工具怎么实现多流SQL实时运算?
    多流SQL实时运算的特点和应用场景多流SQL实时运算是一种先进的数据处理技术,它在大数据处理领域中扮演着至关重要的角色,尤其是在需要对多个数据流进行实时分析和处理的应用场景中。该技术结合了SQL(结构化查询语言)的易用性和流式计算的时效性,允许用户以声明式的方式对不断变化的数......
  • 一篇文章让你掌握99%的Python运算符。干货很多,建议收藏!!!
    Python中的运算符是编程中的基础概念,用于执行各种操作和数据计算。以下是一些Python中的主要运算符的概述:运算符1.算术运算符算术运算符语法规则+:加法-:减法*:乘法/:除法(结果为浮点数)//:整除(取整)%:取模(求余数)**:乘方算术运算符示例假设我们要编写一个程序,该程序会接收用......
  • Shell阶段02 shell变量运算(整数运算/小数运算), shell变量案例
    Shell变量运算加减乘除求余num1+num2num1-num2num1*num2num1/num2num1%num2求余整数运算expr$(())$[]let只支持整数运算,不支持小数运算expr数值之间必须要有空格进行分开,当使用*乘的时候,需要对其进行转义使用,不能进行次方运算[root@......
  • 动手学深度学习——基本张量运算
    基本张量运算张量张量可以被看做多维数组,高维矩阵,可以进行多种数据操作和数学运算importtorchtorch.tensor([[1.,-1.],[1.,-1.]])创建张量tensor([[1.,-1.],[1.,-1.]])a=torch.randn(2,3)torch.sigmoid(a)a处理张量tensor([[-0.1690,-0.2554,-0.4......
  • 运算符重载
    运算符重载基本规则可以重载的运算符:不可重载的运算符://返回类型operator后面加运算符(参数列表)//eg.Integeroperator+(Integerl,Integerr);classInteger{public:Integer(intn=0):i(n){}constIntegeroperator+(constInteger&v){ //在类中......