00:02
有了二,有了二进制以及各种进制转换的基础过后呢,我们现在再来学位运算就会学的非常的到位,也会学的非常的清晰。首先我们先提出关于未运算的几道思考题,大家先看一下,大家看这有一段代码。这有一段代码,这有个一,然后呢,这有两个这样的符号。这个符号叫什么呢?这个符号叫做位相位移叫叫位移,就是呃,就是一。它的向右这样这样念啊,一这个数向右位移两位。说说它是一个位移符号。那么这个负一也有一个两个箭头,这个是负一向右移动两位。那么这边还有这样一个符号,是左移符号,那这样如果是一,然后呢,两个,呃,两个这样的叫做小于符号吧,啊两个小于符号我们怎么念呢,叫一。
01:03
向移向左位位移两位。那这边呢,是负一对向左。位移两位,他问这个结果是什么?那么这个题我们先不去回答是什么,我们先给他先抛出来,你们先想一想怎么做哈。呃,这个规则就是位移的规则,其实前面已经讲过了。前面已经讲过了,大家应该还记得什么叫做向右移,向左移。那如果说同学们要把这个题搞清楚,搞清楚的话呢,其实我们还涉及到一个二进制的这样几个概念,这里还涉及到,我说一下这里还涉及到。还涉及到二进制中,二进制中什么呢?源码。源码。还有反码,还有补码的概念。
02:02
不骂的概念。也就是说,如果我们要彻底的明白这个位移结果到底是什么,我们还需要跟大家讲一下二进制的这三个特别重要的概念,就是源码、反码、补码。先把这个问题先留在这里,同学们先留在这里,你的脑海里面,要知道,待会儿呢,我们要解决这个问题的。要解决的问题大家都知道,位移的规则我们都知道了,但是它到底怎么位移,跟我们的源码、反码、补码有关。好,这是第一个问题,先抛出来,大家先先思考着哈。第二个又来一个问题。大家看这边呢。有这么几个符号二,这个叫做暗位取反,一个波浪号一个二,这个相当于是对二,这个数呢,按位取反,看它等于多少,这个是按位与。这个是安慰或啊,下面都这个叫汉安慰,抑或那这个又分别等于什么呢?同样这也是我们的位运算。
03:01
那么要把这几个题的答案拿出来,而且要说明白呢,同样也涉及到刚才的二进制的源码、反码、补码的概念,所以说这个题呢,我们先先抛出来,大家也先思考。好,现在我们既然抛出了两个问题,我们必须要做一个回答,那要做回答的话呢,我们须要对二进制里面的一些规则,但是就说我们计算机运行的一个底层原理。还要多说几句话,首先呢,二进制,刚才同学们老师已经讲过了,逢二进位的一种进制,它呢是用零和一来表示的,那么在现代的电子计算机这个计数里面呢,都采用的二进制,也就是说我们一个数进行加法、减法、乘法、除法的运算,它的底层都是二进制来执行的,并不是我们十进制。为什么计算机的设计者计算机设计者是冯诺伊曼?那么它为什么会采用二进制而不用十进制呢?原因是这样子的。因为。
04:10
一和,就说这个零一啊,它特别是是易于电子方式的实现,那么在计算机内部处理信息的时候都采用二进制,因为我们这个电波了,一个高位一个低位,用零一表示是最稳定的,所以说在电子计算机这个世界里面都是二进制。OK,好,这个地方大家要明白,就说大家一定要知道一点,计算机,咱们计算机底层哈,就听这个意思,计算机的这个底层它都是二进制。这个这个概念要有。那为什么用二进制不用十进制呢?是因为二进制特别适合我们的电子方式实现。这点要有明确,那么现在呢,我们再来看一下二进制里面特别重要的三个概念,哪三个概念呢?源码。
05:02
斑马和补马。先跟大家聊一聊网上对这个源码、反码、补码的解释呢,有些过于复杂,就是有时候你本身还知道一点,给你说完了过后你就彻底不明白了。适得其反,那这里呢,我精简几句话,这几句话大家一定要记住,就说在我们这个编程领域,不管你是学C语言还是学Java语言。你这个源码,反码、补码的概念一定一定要非常的清晰,我们先看一下关于他的几个介绍,第一句话。对于有符号的数而言,当然我们C语言里面呢,一般来讲我们都是用的有符号的,对吧,肯定有负数正数这个说法。那么二进制的最高位是符号位,零表示正数,而一表示负数,什么意思呢?就说假,假如我们有一个二进制的数。加这个二进制数,OK,比如说我们这有一个这样一个数,呃嗯,有八有有几位啊,数一下我们数这样给它分割一个一个半一个字节吧,一个。
06:10
两个。三个四个。一个两个三个啊,大家看这是一个字节,那么这一位。就是最高位。这个最高位呢,它其实一如果是有符号的数而言的话,这个就代表它的符号位。符号位怎么表示正数和负数呢?零表示正数,一表示负数。记住了啊,就是以后大家记住,零表示正数,一表示负数,教大家怎么记,教大家怎么记,有些有些时候我们用久了,我们用一忘。不,有时候就很容易忘,零表示正数还是负数啊,我告诉大家,大家看这个一。和你。这个零是不是一个圆圈啊。这个圆圈竖着放是圆圈,横着放呢,还是一个圆圈,但是这个一大家有没有发现一,它竖着放是这样子的,横着放变成这个这个德行了。
07:03
所以说一看就是个负数,因此呢,这一下就记住了,就是一,你横着一放就是负数,所以说记住。就就记,如果想不起来,就把这个横着放,零横着放还是011横着放变负数,所以一下就记住一表示负数了。这是第一点,第一句话,第二句话,正数的原码、反码、补码都一样。也就是说对于一个正数来讲呢,源码、反码、补码是三码合一。就都是一样的。那么对于负数而言呢,注意听,对于负数而言,它稍微麻烦一点。他的这个砝码。等于它的原码的符号位不变,其他位取反。取法就是零变一,一变零。那有些同学老师说为,为什么呢?这是他规定好的,一定有它的道理。那么负数的补码又怎么得到呢?负数的补码是它的反码加一来得到的。
08:02
好,第五句话,零的反码补码都是零啊,但是这个当然很好理解了,最后一句,最后一句话尤为重要,尤为重要就是计算机在运算的时候呢,都是以不骂的方式来运行的。那为什么说老师为什么这个计算机它要以不骂的方式来运算呢?这是因为用不骂的方式可以把正数和负数两个统一起来,再说一遍,用不骂的方式来运算呢,在计算机底层运算,它可以把这个正数。和这个负数啊统一起来。其实他是一个很聪明的做法。就是计算机的设计者冯洛伊曼呢?他很聪明,他用这个补码的方式就可以把正数和负数统一起来了。好,这六句话大家一定要记住哦,这六句话后面我们会,我们在有了这六句话过后呢,我们再回头来看。就是我们的这个位运算。
09:01
不管是位移,还是对胃进行这个取反,或者是抑或等等,我们就非常的方便了,这几句话我再说一遍,一定要把它。理解了,并且要求同学们记住。这个不是说你光知道就可以了,必须记住,因为这个是我们学计算机的一个根本。好,同学们,那关于我们这一个源码反码的知识点先说到这儿,下面呢,我们就准备给同学们来用刚才学到的知识来解决刚才的位运算的问题,好,那么位运算呢,我们具体的操作我们放在下一个视频为大家讲解。
我来说两句