00:01
好了,同学们呢,接下来咱们继续再往下呢,各位啊,咱们开始上课了。呃。好,那么接下来接着往下看啊。还有一些规则,我们来看一下。嗯,零六。啊。那么这块咱们再来看一个题目,各位啊,再来看一个题目,呃,比如说现在有个叉。啊叉类型,然后就叫做C吧。C呢,是什么呢?是。
01:02
A啊A,然后接下来呢,嗯,在这呢,有一个bit啊B。等于一。那如果说现在有一个什么呀,Short啊,Short先别给了。就直接这样吧,啊,有一个什么呀,有一个。C加上啊,在这里第一次啊,我们使用啊加上B。那这个C是什么呢?它是一个类型对吧。那B呢?什么类型呢?类型是不是。差类型和BAT类型做加法运算,最后的结果是什么类型呢?注意啊。这里的加号啊。是负责求和的。
02:06
那他算完之后是一个什么结果?来。我们先先看一下能不能能不能这样做啊。我们。Java c编译一下TEST06,这是Java。哦,来了是吧,行行。然后Java去运行int test06。最后的结果是98。首先呢,大家对这个结果。有没有什么疑问?就现在我们不知道这个98到底是什么类型,是不是哎。我们这样,我们采用差。啊,来接收一下。
03:00
啊,或者说我们采用什么呢,来接收一下。行吧,S。等于什么呢?这个C。加上什么呀D。啊,C加B。我们来编一下,看看有没有问题。编译一下啊,Java c编译int test06.java。好,出问题了。他说错误啊,不兼容的类型从int转换到short可能会有损失。从这里可以得出一个什么结论,说这个加号啊,运算完之后是一个什么呀,是一个印的。来,所以呢,让大家失望了啊,这个编译报错了。编译报错了,在这里呢,有一个很重要的结论啊,很重要的结论。这个结论是什么呢?
04:03
注意啊,是这样的。差。Short。啊,做混合运算的时候。啊是各自各自先转换成。印他啊,再做运算。这个结论呢,你需要记住。啊,BAT char short做混合运算的时候,实际上不是说像刚才这个同学哪个大听哪个不是这个啊,不是这意思是bad上差呀,这三种类型做混合运算的时候是各自啊先转换成int再做运算。先转成int,再做运算。这个规律你记。那么咱们同学们肯定会有疑问啊。说老师啊。这个为什么会报错呢?
05:01
诶。是这样的。因为咱们同学们C加上B。是多少啊?九十八九十八能放到哨子里边呀,没超范围呀。Short k等于98。我们来看看上面的这个和下边的这个有什么区别,我们把它注释掉。啊注释,然后呢,我们去一下。Java c编译test06.java好,编译通过了,没有报任何错,所以后边是可以存98的,那为什么这个就不行呢?来,我们再编译一下。那不行啊。说不兼容类型从int转换到可能会有损失。是这样的各位啊。只有当你后边等号啊,后边写上的这个数据。
06:02
很明显,写出来一个数据的时候啊,编译器才能检测,如果你在这里有一个加号的话,编译器只能检测出来什么呢?只能检测出来这里是一个加法运算,但是这个加法运算最后算出的结果到底是多少,对于编译器来说他是不知道的。明白什么意思吧?明白了,我打个一个呗。就直接写98和你在这这个计算,算出来这个98的区别是啥。它的区别是什么呢?98直接写到这编译器能看出来,能识别出来98哦,没超范围行,能直接附上。但如果说你这个地方有个加法运算的话,那编译器一看是吧,我知道你是个加法运算,知道你C1呢是一个差,知道你B呢是一个BAT,但是这个加法运算是在程序运行阶段才会求和的,至于这个结果是什么,其实编辑器不知道。
07:07
啊,编译器啊编译器不知道这个加法最后的结果。加法最后的结果是多少?啊,只知道什么,只知道是。类型。明白吗?只知道它算完是个int,你看人不加入类型,从int转成short可能会有损失,所以这块的话大家要注意啊,要注意。我们这个程序要想改的话,你得这么改怎么做呀,哎在这加一个什么呀,哎加一个short,好各位这样写行不行。这个不行了,对吧,那这样修改行吗。这样修改,我们来编译一下。我来看看啊。上翻就行了,走。
08:02
还是这个问题,第17行说呀,Int转成上可能会有损失,17行在这儿。这还是有错误。这个是为什么呢?因为啊,你这个括号加的位置啊,不太对。因为它这个运行啊,它有这个先后顺序,它实际上你知道这样写的话,它就是先把这个CE啊转成什么呀,SH,然后前面整体这个short类型,再和后面这个BAT类型做运算,我上面有个规则。啊,就是BA short差做混合运算的时候,先各自转换成int再做运算,所以这个整体算完之后还是一个什么呀,Int类型。所以这样肯定是不行的,那怎么做呢?好,如果说我把C加上B呢,给它加一个括号括起来行不行?这样就没问题了。这样我们这个程序就可以编译通过了,因为你C加上B之后呢,这块啊,咱们呢,它是一个算完之后是一个int类型,那么int类型呢,转成short类型加类型转换就可以了,所以这块我们就编译通过了啊编译通过了,那么这个例子呢,我最主要是想跟大家聊一聊哪个知识点呢?哎,各位啊,大家注意了。
09:13
就是讲完了,咱们要知道重点讲的是什么,首先第一点我希望各位能够记住啊,就是我们啊和这三种类型做运算的时候,它会各自啊先转换成类型再做运算,比如说C加上B的话,它会把C转成对应的是90。对吧,B这块它就是一呗,对吧,97加一是98输出结果,那能不能直接付给shot呢?这是不行的啊,直接付给shot肯定是不行的啊,因为什么呢?因为CE加上BCE的类型是差,B的类型是BAT,做运算先转成int,转成int,最后结果是int,但如果你直接写个98是可以的,因为我说了啊,如你加法这个东西,编译器它不知道你加法计算结果是多少。
10:00
啊,所以说这个呢,编译器只能看到后边是个int类型,所以int类型不能直接付给什么呀,我们的short类型大容量不能直接付给小容量,那大容量付给小容量需要加强流转换符,但这样加又不行啊,因为有运算符优先级的问题啊,运算符优先级的问题,那么这一块呢。我们这个C加上B啊,然后我们转成short加括号啊。Int a等于11 short s等于A。这个肯定会错呀。这肯定会错呀。这个当然会错啊。来int a等于。一吧。Short s等于A。输出S编译一下。
11:00
哎哟,看看啊,这个A已经定义过了吗?哦,已经定义过了是吧,啊X吧。啊。好,大家看。错误不兼容的类型,从int转换成short可能会损失精度。在这个位置,那有同学开始懵了,说老师不对呀。不对呀,呃,这个不是一吗?A是一吗?不是这个一这个东西不是可以放到这吗?少能存一啊同学们为什么会出问题啊,原因是我再强调一下啊,编译器它只只是检查你的语法编译器啊,它只能检测到这个变量A,它是一个int类型,你这个int类型是不能付给烧烤类型的。啊。变这个编译器它不知道A里边存的是啥,因为A里边什么需要在运行阶段才能决定,因为等号啊,它这个运算符在什么时候执行啊,在我们运行计算执行啊,它做复制运算,右边的表达式执行完的结果付给左边这个变量,所以编译器呢,它会检查你的语法对不对。
12:14
但如果你直接写个一,这当然是没问题的。没问题的啊,但你这写个A就不行啊,你写个A就行,对short X等于一这个可以啊,但是X等于A这就不行啊,不可以,编译器只知道。只知道A是一个int类型。不知道A中存储的是哪个值?存储的是哪个值?各位啊,这个呢,大家要了解一下,了解一下啊,知道就行了,那我在这里再强调一下啊,一个结论是什么是BAT差short做运算啊,你就记住这点就行了,它会各自先转成int再做运算。啊,强转这个事儿大家要注意啊,直接写。
13:01
结果数字啊,和你做这个运算它肯定是不一样的啊好,这就说到这儿啊。
我来说两句