00:00
接下来我们来介绍赋值运算符,这种运算符其实对于大家来讲,应该是学习一门语言的时候,最初接触到的一种运算符啊,因为一开始的时候我们都要声明变量嘛,其实声明变量的时候,像Java里边我们int a等于一这种方式其实就是。采用了一个赋值运算符,赋值表达式,对于变量A给它赋了一个初值啊,所以我们对于这种方式应该是完全不陌生的啊,呃,那SKY拉里边整体来讲跟Java也是非常的类似,简单来讲就是使用赋值运算符,呃,把某一个值或者某个计算之后的值。对于某个变量进行一个赋值操作啊,把这个值给给定到这个变量上面,所以最常见的呢,当然就直接是等号,之前我们讲这个比较运算符的时候,双等号等于等于表示的是相等关系的判断,而如果是单等号就一个等号的话,那表示的就是最简单的负值计算啊,比如说后边如果我们这个等号也是属于一个。
01:12
双目运算符或者叫二元运算符,它是要把右边表达式的计算得到的值赋给左边的变量,它的左边的这个表达式必须只能是一个变量啊,所以它只能做这个变量的赋值,那在这个基本的赋值运算符基础上呢?另外还有一些复合型的复值运算符,那就是首先我们可以跟所有的算术运算符结合在一起,大家看就有了加等于,减等于,乘等于,除等于,甚至。取模等于百分号等于,它表示的是什么呢?呃,其实就表示的是用当前变量的值跟后边的某一个值做一个计算,得到的结果呢,再负负回去,负给之前的这个变量啊,所以大家看到就是C加等于A,那其实是表示C先加上A,得到的结果再重新付给C啊,这个大家其实也是在Java里边比较常用的一种做法,这是关于跟算术运算符的一个叠加,叠加之后赋值,然后另外呢,除了跟算术运算符可以进行这样的一个操作,还可以跟一些位运算符做类似的操作啊,所以这一部分呢,接下来这就是可以做按位左移,按位右移之后,然后再复制啊,所以大家看就是后边的这一个第二个。
02:40
操作数,那其实就是未运算的这个操作数。比方说C,然后两个小于。的这个符号表示的就是暗位左移,那后面是二的话,那就其实是暗位左移两位啊,那如果是两个大于号的话,那就表示暗位右移,右移两位,那另外还可以暗位与按位取抑或或者暗位或啊,那这样的话再赋值的话,相当于就是后边做一个。
03:12
未操作得到的结果再付给原来的变量啊,这就是常见的一些赋值运算符,基本上跟Java是一致的,需要注意的呢是Java里边大家还应该还记得有一个非常简单的运算符,叫做自增自减,就加加减减。注意SC拉里边没有这样的操作符,大家回忆一下Java里边的加加减减,这个自增自减,它主要是用来干什么呢?呃,它相当于比方说I加加,它表示的就是I,原先如果是零的话,现在就变成一了,那大家想这不就相当于是加了一个一之后,然后再就是I加了一个一之后再付给I吗?不就是相当于加等于这样的一个操作吗?赋值操作吗?哎,所以在盖拉里边可以用加等于减等于来实现对应的加加减减这样的操作。
04:07
啊,接下来我们还是在代码里边简单的做一个测试,也给大家相当于做一个赋值运算符的一个复习啊,那首先我们还是在Java代码里边先来做一个回顾啊,Test operator前面这一部分代码我们主要测试的是。一角运算符主要是相等的判断,然后接下来我们要要测试的是负值运算。中间我们可以。还是有一个分割分割线好,那赋值运算符这一部分,一般情况下啊,这个都是,比方说我们直接定义一个BAT类型的一个变量等于十,这这就是定义变量的声明变量的时候,直接对它附了一个初值啊,这个是最最简单的这个用法啊,呃,然后接下来呢,如果我们想要对这一个的值进行更改的话,那大家知道就是我直接去做这样的一个负值,就相当于把它的值更改了,那呃,大家需要注意的是,假如这个时候我直接做一个。
05:25
B等于B加一,这样是可以的吗?诶,这个要注意啊,这个是不行的,因为如果你这里边是int的话,这个是没有问题的,要知道这里边所有的整数类型啊,默认做计算的时候就是int,但是如果这里是派T的话。ATT类型的一个B,然后我们如果要是加上一个一一,在这里它是一个int类型,那么它做这个计算的时候,其实得到的就是一个,就是一个要做这个自动类型转换提升成int嘛,得到的是一个int类型,那这个时候int类型又要再赋值给一个BAT类型,这就是之前我们说到的啊,高精度的数据类型赋值给低精度数据类型的时候,那就必须得做强转了啊,所以大家要注意直接这么写不对,但是如果要是加上一个就不是in的啊,加上一个bit类型的长转的话,这样的话就对啊,所以呃,在这个Java里面,大家也需要注意赋值的时候数据类型的相关的一些约束啊。呃,那这里面比较特殊的是,他会发现如果要是用加等于的话,其实是没有这个限制的。
06:38
因为我们本来说啊,加等于就相当于是B等于B加一,但是大家看,如果要是BAT类类型,你直接B等于B加一,这个相当于有一个int类型要转成BAT,必须做强转,而如果我们直接把它写成了加等于的话,那其实是不需要,相当于这里边默认给我们做了一个强转了,直接这样做就是对的啊,所以里边我们可以直接把它做一个line打印出来,看下当前这个比的值到底是多少。
07:09
那初始的时候是一,然后后边这里加了一,后面又加一,大家看最后是12对吧?哎,所以这是这样写是完全没有问题的,不过就是要注意,这里边默认会做反转。就是Java里边关于这一个,呃。R加等于啊呃,跟算术运算符结合在一起的赋值操作,大家需要注意的一点,然后关于另外一个Java里面的特色,就是这个加加减减,其实大家知道啊,这种操作自增自减操作啊,是源自于C的自增自减。那么这一部分我们在使用的过程当中啊,一般房建的这种操作,那大家可能是一个for循环里边对吧?啊,直接就是比方说int I等于零啊,I小于十,I加加啊,或者说int I等于十,呃,I大于等于零,然后I减减啊,这样的一个自增自减操作,作为这个循环变量的控制是非常方便,也非常常见的,但是大家如果要是仔细回忆的话,就会发现自增自减,加加减减这个操作啊,它还会涉及到一个位置,就如果说我们一个变量是在后边加的话,就是如果I加加的话,那其实是要先把这个I,如果它还是表达式里面的一部分的话,是先要做计算,然后最后再去加加,再把这个I的值更新,那如果要是它放在前面是加加I的话,那是要先把I的值加一,先自增,然后再去参与其他的一些计算。这一点其实。
08:54
在有一些细节里边会非常非常的让人困惑啊,这可以说在有一些场景下是程序员的噩梦啊,就是你调试一些代码的时候,如果你对这个没有提前的准备的话,可能都想想不到是这样的一个问题,所以这里面我们可以举一个最简单的例子,比方说从这里边给一个X等于15,然后呢,再定义一个Y等于X,大家这个我们都非常的熟悉啊,非常简单,这个如果要直接写出来的话,自然就是X等于我们加上X。
09:31
然后后边我们再来一个Y等于加上YA出来的话。因为是X加加,那大家知道就是X其实是先要赋值给Y,然后接下来X才变,所以你看最后出来的话,X是16 Y还是15没有变,是之前的那个值,但如果说我们把这个稍微的做一个改变。
10:01
啊,当然这里我们就直接给它做这个负值啊,直接更改就可以了,如果把X加加乘加加X的话,这个时候我们再来做一个输出,那其实大家就会发现X和Y就都是16了,因为是X先做一个自增变成16,然后才付给Y,哎,这两者在前,就是我们所说的这个前加后加啊,这个是不一样的啊,那这种情况如果说我们要记得比较清楚的话,还能够处理在另外一种比较特殊的场景下。结果可能就会比较神奇了啊,这种场景就是比方说我们定义一个X等于23,然后接下来呢,我们让X。等于X加加,那接下来如果说这个时候我们要再把X做一个打印输出,它到底应该是23还是24呢?有同学可能想到了你这个,既然最后你又还是要加加嘛,尽管这里边是先赋值给X,然后你再加加,再加加,那也是X做了改变呀,那肯定是24,我们可以运行一下,看一看最终的结果是什么,这也是Java里边这个非常有趣的一个问题啊,它最后还是23啊,这个原因大家可能之前学习Java的时候也见过这样对应的一个解释啊,啊,因为这样一个操作,这样一个语法啊,底层Java在做转换,转换成这个字解码的时候,它做的操作是什么呢?它其实这一步我们看起来很简单的一行代码,它是分成了三步的,就是首先其实我们应该是有一个临时变量temp。
11:43
那碳我们让它等于X加加。也就是说它是把这个这一句代码拆开的,然后呢,呃,就是先把这个tab等于X加加得到的tab值,然后之后呢,再把它复回给X,就之后再把这个碳值再塞回到X这里,如果按照这个规则来看的话,大家看到第一步,那首先按照这个就是把X23的这个值付给temp,那temp其实就是23。
12:17
然后下一步呢啊,拆开之后把这个放到第二步来,下一步是X加加它在之后做嘛,这个时候X是24,但是这个X是24没有用了,因为接下来X的值又要变,要把之前23TEMP的值再塞回来,所以最终X的值又变成了23。啊,那所以就会发现这种用法在我们项目实际使用的过程当中,这个逻辑可能就非常混乱了,我们可能经常要去考虑,诶,这个加加减减到底表示的是什么东西呢?哎,所以有时候如果我们频繁的在代码当中使用它的话,就会导致代码的语义不明晰,就成为了程序员的噩梦啊,所以大家就会发现在skyla里边把这个东西直接就删掉,呃,你不要有那么。
13:07
不明确的这种语义的表达嘛,那既然这个加加减减可以用加等于替代,那我们干脆就把它省略掉,删掉它,就没有这样的一个表达了啊,所以接下来我们在加大里边也可以简单的写一下,后面这个是三个,现在我们是第四部分赋值运算符。啊,整体来讲也是非常的简单啊,我们定义一个一,前面我们不是定义了一个bit吗?啊,或者跟目边也叫做一样的变量啊,我们同样还是叫做B,同样定义一个十,然后接下来呃,比我们就想到了,如果说要更改它的值的话,那应该把它定义成Y对吧?啊,那接下来如果说我们要是B直接要去做这个加等于一的话,这样一个操作可不可以呢?In left b。
14:01
我们来运行一下。看到这里边本来不报错,但是大家如果运行的话就会发现这还是埃idea尔的问题啊,埃idea尔没有把这个错误检测出来啊,那这里边直接要运行的时候,这个编译其实是通不过的,编译器告诉我们这里边我们要的是一个BAT,而这里边拿了一个这个int放过来了,对吧?啊,所以这里边大家要注意不能这样去做操作啊,那当然了,如果这个时候我们给的是一个这一个int类型的话。那自然就不存在这个问题了,后面我们可以我把这一行注掉,接下来我们可以直接I加等于一。后面就可以直接把这个I当前的值打印出来了,就是13对吧?啊,这就也就类似的实现了加加自增的这样一个功能啊,那对应的这个,如果我们想要直接在这儿写爱加加的话,加拉里边没有这样的语法,是大家需要注意的一点,直接用这个加等于N等于可以替代它,把里边大家熟悉的加加减减操作。
15:10
这就是关于赋值运算符,大家需要注意的地方。
我来说两句