00:00
哎,下一个。未印刷服啊,每次说到未印刷服呢,紧跟着一句话,这个大家呢,不用特别多的去关注,哎,咱们开发中用的比较少啊嗯,位上数首先都有哪些呀,左移右移无符号右移有这个无符号左移过没有啊对,就是我们往左移的呢,那个移完以后就是原来是这个数,然后移万往左移,移完以后这边空的都拿谁补啊对,全拿零补啊,你要是负的也是拿零补。正数负数都哪里补啊,当然呢,关于右移这块有有问题了啊,右移的话呢,因为我们说最高位是符号位的啊,这是正数,那右移以后,如果我使用的是这个符号啊,那右移完以后拿谁补,拿零补对啊,有一几位你就拿补几个零啊,如果说的我这个最高位是一个一是一个负数,那又一拿一补,对这个东西那时候还是没明白,我拿一补补几个一啊对,缺几个就补几个呗,那你你还能补两,那不够了,那咋整咋整是吧,哎,缺几个补几个啊全是一样,这是呢,就是哎两个这个符号了啊,那三个这个符号,三这个符号呢,这就三这符号对于正数来讲有有有区别吗?跟它。
01:27
没有没有,哎,无负号呢,就是又一班以后都拿零补,那如果这个数本身就是正数,都拿零补,跟这个两个的其实一样是吧?对啊,尤其主要是针对这个附属啊附属的你要这个无符号右移呢,就都拿一拿零补呗。对吧?哎,都拿零补啊,有没有同学有点迷糊,说干嘛非得都拿零补啊?一会儿咱们做一个题目啊,咱们复习完了,带大家做个题目,然后你再去体会一下啊嗯,行先先剖先这个不说那个问题啊,哎,没有这个左移的这个三个啊,这要注意,那除了这三个之外,还有的是鱼是吧,还有货,哎还有一个疑货,哎就他还有一个去反的这个。
02:21
对,嗯,行,其实这些符号呢,咱们用的都比较少啊,都比较少,但是呢,嗯,就是当用户真的要想用的时候,咱们的一壶啊,所以所以说Java在定义的时候呢,定义的其实比较全啊,包括像逻辑里边的这个符号,说你俩不一样的时候呢,就是true,像这种操作其实我们很少用啊,或者有时候也想不起来用啊,你自己就写这个逻辑,我们不用它也有,也有其他的一个办法,我们给他拼凑出来这样一个效果啊,就是呃,保证就Java给你提供的要全一些,就是你想用这种,呃不想不一样的时候呢,让你结果是个处的符号我有,至于说你用不用,还是说平时出现的场景多少,那就看实际开发了,这个其实用的都比较少啊,未算服呢,整个来讲用的都比较少啊,而且大家发现好像还不太好用是吧,就是或者说不会用啊。
03:13
嗯,这个接下来呢,这个典型代码,这个其实没啥,就是咱们写了几个例子啊。哎,在这儿呢啊,就是左移右移,包括这个鱼或抑或什么意思,哎,这个说了说。哎,也就是这样啊,好,CTRLS一下,嗯,下面呢,我们提到一个经典的面试题,说最高效的方式去计算二乘以八,诶等于多少?对,我们是让二左一三位这样写是对的,或者呢,你说一下八呢,左一,哎一位。但是这个题呢,只能这样啊,你说我要算一下二乘以八,你要回来我二乘以九,二乘九也还行是吧,29,那你就得咋着啊,九是不是左移一位这样是吧,但我要是309呢,309就没戏了,对,我们这俩里边至少得有一个是二的几次幂的方式是吧?呃,因为我们涉及到左移右移的话呢,呃,跟二这个几次密系相关的啊。
04:26
嗯,哎,这个呢,就这样说啊,这俩这俩就不再谈说谁更高了,哎,这俩就不再谈谁更高了,按说呢,好像说这个往左移了三位,没有这个移位快是吧。对计算机来讲的话,这个其实都可以忽略掉啊,这个大家如果大学这个这个大学你之前学过这个数据结构的话,数据结构跟算法呢,通常都是一门课啊,在里边呢,我们讲了一个算法叫时间复杂度,对有的是个这种常数级的是吧,有的是跟这个整个这个数据的容量N呢,是一个一元的线性关系的,还有是这个N方关系的啊,还有这个三次方的关系的,还有这种就是对有log n啊log n这个底数是二哈,嗯,跟它相补一个二吧,嗯,还有呢,是跟这个二的N次方相关的,还有呢,是跟N的阶乘相关的,甚至还有NN的N次方相关的。
05:26
啊等等这样的一些,这个叫时间复杂度,咱在这呢,就先不详细的给大家去说这个事儿了啊,像刚才写的这两个呢,跟容量都没有任何关系,都是属于常数级的,所以把他俩就看为是一个级别的啊,所以这样写那样写都可以啊,啊你别怎么着呢,别按照咱们通俗通俗的那种说,我二乘以八呢,就是八个二相加,那就跟跟这个容量有关系啊,像八个二相加,那你这个N就是八。呃,相加做的运算哈,这个级别就一下蹦到这儿了,这个效率就要差一些啊,可能本质上来讲,这个题目比较简单啊,你发现差不了多少,但是呢,那也是在不同的这种量级上的。
06:07
啊,这要注意啊好,嗯,下面呢,需要特别说明的,呃,特别说明的这个就是呃,我们这块呢,其实是做了这个相应的这个,呃,把这个在这写的啊。CTRLC。看过来,哎,位运算符操作的都是整形啊,这要注意啊,哎,然后呢,这个左移右移一定要注意。在一定范围内啊,对,你要整过了,这个咱们也演示过了,那就可能往左移,移到一定程度以后呢,这个数据变成一个负的啊。行。嗯,这块的话呢,咱们这不是做了这个典型的两个练习,呃,典型的一个题目啊,啊就是我们提到了说交换哎两个哎变量的这个值,咱们刚刚早上也考这个题了啊哎在这讲的,然后呢,一会儿咱们复习完以后呢,再做一道问题,哎这个问题呢,就要实现啊这个60这个数的二进制到十六二进制的一个转换好。
07:19
啊,如何实现60到二进制到16进制的一个转换啊,这呢其实也可以归到这是一道考题,这个考题呢,咱们可以体会一下,这个无符号右移,哎,到底干什么用啊,这个别一会儿写了,咱们现在直接说一下就行啊,就是这个题目呢,其实永远要做呢,永远也做不完啊,咱们就诶直接呢带着大家来看一下,我在那个课后题这块给大家留了啊,这是一个word打开。来试图把这个勾上啊。呃,找一下我这呢,写的是这个啊,说如何求一个零到25范围内的一个整数的16进制值,比如说我这呢,就拿六十来举例子,那60呢,我想给它表示成16进制。
08:05
啊,60~16进制,这个我们就写个计算器,哎,这呢,我们来一个32位的啊60,嗯,长这样,然后看一下16进制啊,这是3C,对,那我们现在呢,就希望呢,你把这个3C呢,得给它输出出来啊嗯,从这个开发的角度来讲,如果你有这样的需这个诉求的话呢,我们其实不会自己去写的,对,都给我们提供现成了哈,在这样的一个integer类当中,这是咱们后边讲面向对象中的包装类,对这个包装类呢,直接我调这个To Bary string啊对,我呢就返回的是60的二进制啊,其实呢,就相当于能返回这个结构了。呃,我们先双子啊60诶,也就是说如果我调完这个以后,我输出一些STR1,它会给我们输出这个结果。
09:07
当然这个结果呢,是带双引号的啊,因为人家是个字符串。嗯,然后呢,我接着呢,去调这个inte.two ha string,这个呢,输出的就是一个六,呃,16进制的60,就相当于是你点了一下就会输出这个str呢就是3C,嗯,那现在的话呢,咱们说别用这种自动的方式,咱们自己手动去写啊,怎么写,哎,就是这道题。哎,就这道题,这个题我就不写了,咱们直接来看一看啊,说一说就可以了,这个大家能听懂这个思路呢,下来就是写的事了,好,你看我这里边这个做法啊,呃,首先呢,我先这样说吧,咱们自己呢,如果你要拿到一个二进制就是它了啊,我想把它转换成16进制,咱们也讲过了,怎么做是不是四个一位啊,把这四个呢一算。
10:04
是不是有C这四个一算,这不有三吗?哎,为什么我这要强调个说0.25呢,255最多的是不就是这这都是一不就完了吗?所以说只涉及到这两块,这块呢就不用再考虑了啊。如果这个数更大的话呢,前面这块还得接着这四个一组,这四个一组0.255范围内的数呢,这块全是零,所以不用管了。行,那好,这个问题呢,就划归为我首先这呢是一个60,我呢是不是想办法得把这四位呢单独的取出来呀,其他的位置都不要啊,我就单独的取出来,它怎么能够把这个1100取出来,这里边就有技术了,你看我这写的,看能不能看懂。我跟15求一个雨,这这是逻辑还是什么运算数?
11:01
未对未嘛,你这不都是整形吗?是吧?哎,未运算术啊嗯,位运算术,我这跟15求了一个与,为什么用15呢?为啥用15呢?哎,因为15呢,全是一四个一。哎,然后呢,我求的还是个与与呢,在我们未运算符当中,就是且相当于是是吧,那你想想我这这15这是不是全是零,全是零啊,那你说我这个求完雨以后结果是多少,哎,就是后边这个1100这个留着呢,其他的全是你非常的。雨的话呢,就是它上下都是一的时候才是一,哎,我就让我这个最低的这四位是一,这样的话呢,就是原来你这个数是多少,其实就保留下来了,哎,然后其他位置上不管你有没有一,因为我15全是零了,所以你的语完以后呢,其他位置全是零,这样呢,咱们不就相当于把最低的这四位就取出来了。
12:10
哎,对,最低这四位取出来以后的话呢,呃,这个在计算机底层,它就长这样,但是对于我们来讲的话呢,你可能要输出的话呢,它输出的就成了一个十进制了,它就写成这个这多少12吧,这是四加82是吧,对,就如果呢,你要是输输出的话呢,他就输出12了,但咱不能让它出12啊,你超过十的这个数不就得拿abcd去表示吗?所以咱们我这看我写了个三元。哎,说当你这个I2呢,哎,如果要大于九了,看看是不是满足哈,如果要是不满足,不满足的话呢,那就直接呢写你这个数,就意味着你可能是0123456789,它直接是它如果你要超过九了,是十,11,十二十三十四十五,那我呢,就让你呢,先减去十,再加一个A。
13:02
比如说你这个数,咱们这不是12吗?12减十就是二二,再加上一个,咱们说了字符跟这个数值不是也可以做运算吗?加上以后这多少,哎,我再差一下是不是就变成C了,哎,这不就出来这个C了吗?哎,这个呢就是这样子啊,哎,然后我这块呢,给它写成string,就是呃,别让它再做运算了啊,就让他呢,作为一个字符出字符串的这个形式出现了,诶我这都加了一个这个双引号了,这个能看懂吧,哎,行,就这个题,为什么当时我们讲完位三符的时候没讲,是因为当那时候还没讲这个三元呢,哎,现在咱们讲完三元了就可以看这个题了,好看下边。我们呢,刚才把这个最低的这四位呢,取出来了,那现在呢,你是不是就得该取这四位了。那怎么取啊,诶对我呢,先把整个这个结果呢,先整体右移四位。
14:02
你想我整体用于四位以后,是不是这个0011就成了最低的这四位了,剩下这全是零啊,我不管你上面这个数是正的是负的,我都拿零去补,所以我用的是无符号的,因为呢,咱们根本就不关心,我就是咱们当你关心我右移表示叫除二的时候呢,你才用的是两个大于号哈,如果我只关心这里边这个前面这个数值,其他这个位置是什么无所谓,哎,我只是取出来这个位置上的数啊,用无符号的就可以了,这就是一个应用的例子哈,然后右移完以后的话呢,我们再让它跟这个15去求这个余,这不就相当于我能把这四位这个0011就取出来了,哎,然后接着呢,还是跟刚才一样啊,来判断是不是大于九啊,得到这个位置上的值,这个呢是高位,所以呢,这个高位再一拼上这个低位啊,3C就出来了,这个就是三,这个呢就是C嘛。哎,就这样做的啊,还是这道题呢,大家能体会一下,开拓开拓你的思路,哎,这个符号怎么去用,其实我们回头看系统源码里边的时候呢,会见到它会出现这个符号,这个符号呢也会见到,咱们讲集合带大家看源码就会有它呢,也是类似这样去使用的,开发中要用微上户也是这样用啊,但是一般咱们用的都比较少啊,所以清楚这个就行啊。
15:26
好过了啊过了啊,下面呢,这个三元上数,诶三元运上数就一个。三对在这儿啊,就一个就他。嗯,就他啊,呃,这个具体的这个说明,呃,下面呢,写了这个点还挺多的啊,其实这块这都算。哎,CTRLC一下,哎过来啊,这个我写成这个写成一吧,这个改成二啊,这个我改成个三。
16:06
行,这呢是咱们关于具体这个说明,这就不详细的去说这个问题了,然后关于三元,三元这块呢,这个典型题目呢,咱们写了俩,第一个呢,就获取两个数的较大值。哎,这个哎,然后接着获取三个数的最大值,哎,这是两个这个题目啊,这个大家下来呢,练一练就行,后续呢,咱们开发中需要用到三元的时候呢,咱们就来用了,需要注意的就是三元。啊,这里边儿啊,三运算符都可以转换为对if else,反之呢。不成立是吧,相当于呢,如果你要是用这个圈来表示这个if else的,是不是这个更适用性更高啊,对这个if呢,就是更更挑剔一些啊,某些情况下才可以用啊,但是如果这两个都可以用的时候,用谁呀,三元呗,为啥效率高,对,就是效率高啊,当然大家真正开发中用的时候,你你没想起来用,没想到用,用于用了就用了啊,你要能想起来知道也可以的话呢,要优先选择用三元啊行。
17:22
呃,然后后边这块呢,关于流程控制,呃,这是咱们今天讲的一个重点啊,今天呢,都是在做这个流程控制的啊,流程控制呢主要分成三种了,顺序结构啊,分支结构和循环结构,顺序呢这个最好理解啊,咱的代码呢,正常就是从上往下执行的啊,就是顺序了,那分支在Java里边定义了两种,哪两种?If还有个哎,Switch case,对啊,哎,这个你要是完整写其实可以L衣是吧,哎,最后一个L这样的啊,好多个L衣是可以的,呃循环咱们还没讲呢啊张中定义了有三种是吧,循环外循环都外循环这样啊,那循环呢,其实后边呢,呃,5.0的时候有一个新特性啊,就是我们有时候也叫做增强for循环了,这个我们放到后边的时候再讲啊,本质上其实也算是一个for了,哎所以循环你说就就这三种就行啊,那我们前一天的话呢,只是呃把这个in false呢引出来了,最基本的这个结构啊说了一下,然后我们简单的做了这个这个几个小的问题哈,哎把这个我们粘一下。
18:41
看这结果一结果二,二选一。嗯,这个呢,一定要选一的啊啊,因为有个else,嗯,行,然后最后这个嗯,多选一我这一了。
19:04
哎,这样的一个情况,好这呢,就是咱们前一天呢讲到这儿了,然后做了一个简单的题目呢,只是熟悉了这三个结构,哎,然后呢,一会儿过来呢,咱们通过一些例题来说明一下这个if题目当中有哪些需要注意的点啊。
我来说两句