00:02
讲一下整数使用的时候需要注意的细节问题。第一个。各种类型就是我们的数据类型,它的存储空间的大小和我们的操作系统,系统的位数,还有编译器都有密切的关系,所以C语言在这一点呢,是需要同学们密呃注意的,目前来讲呢,大部分的机器都是64位的,我给大家看一个案例,比如说大家看这里。我这边这边是我们的各种数据类型。比如说sand short on sand short int等等等等等。等等啊,那么大家看它分成两大类,首先呢,我换一个颜色,我我这换个颜色先说B,大家看这边先看window。如果是Windows操作系统,这边是Linux操作系统。那有些同学还没有听过什么叫做Linux操作系统,其其实就是另外一种操作系统好。
01:03
那么linu,呃,Windows操作系统如果是32位的和64位的都一样,都是这样子的。同大家有没有发现在这里面这个int就是四,四个字节。看到没有,所以说你你你这有个对应关系,比如char呢,就是一个字节on China呢也是一个short呢,就是两个字节,两个字节好in就四个字节到了,你看这个long。这个浪。这个浪呢,也是四个字节,因此大家有没有发现在Windows操作系统上,不管是32位还是64位,它的这个浪呢,都是四个字节。对,和特其实是一样的。是一样的,那么在在这这个这个64位,他这没有写,没有写的话,就意味着跟32位是一样的。那么我们再看Linux操作系统,Linux Linux操作系统呢,它是有区别的,这个代表Linux的32位。这边代表Linux的64位,我们看有什么区别没有,我们找区别就行了,看这里。
02:02
大家看,在Linux操作系统里边,如果是32位的呢,就是四个字节的大小,如果是64位的,就是八个字节大小,这个地方就体现出它的区别了,明白这个意思吧。大家看我们除了前面讲的这些类型呢,还有像个long类型就表示的更大了,Long long类型,比如说long类型在linu,可在这个window操作系统下面呢,也是八个字节,因此它可以表示更大的范围,就它表示的数的范围呢更大。对,表示的更大的范围,嗯,那这块,呃,我们总结了一句话,就是说什么呢?就是在C语言里边,它每一种数据类型的大小,跟我们的操作系统。系统的位数,甚至跟编译器还有关系。所以说这点是提醒大家注意的。另外一个我要告诉大家,在我们实际工作中呢,C程序通常是在linuxx或者是unix系统下面运行。
03:09
所以老师我们那刚才你们考试的时候通常都有Windows的,我这再加句啊考试。在我们在我们这个二级考试的时候呢,呃,使用的是Windows,因为因为很如果用Linux,很多同学他就不会了,所以说我们考二级考试用的是Windows,这点大家知道。二级考试好,这是我们说的两点,紧接着再来看。整形的使用细节,还有一点希望同学们知道C语言的这个整形哈,不管是同学们看到的也好,浪也好,Char也好等等,它都分为有符号和无符号的两种,就是我们所说的哪两种呢?一个有符号就是sound。Sig还有无符号的。
04:00
UN sig,那么如果前面没有带。这没有说明是sand还是sand的话呢,它默认就是sand,这一点我们在前面已经说过了。最后。第四个点,C程序中我们一般用的是特类型来表示一个整形,呃,但是呢,有些情况下可能你需要表示一个更大的范围,比比如说同学们看。比如说我们。我们这个地方大家看在Windows里面呢,这有一个,呃,这有一个浪形,这个浪呢,也只有四个字节。如果说你比这个浪还要大,那你可以用浪浪这个类型,我给大家演示一下。就做一个小小演示,我们就写在这里了,好,同学们,我们就写在这里,那先写一个小案例吧。还是新建,新建一个文件,这个叫我们整形的细节detail。很简单哈,我们运行,我们给他建起来。
05:01
然后呢,我在这边把他的名字改成C。感C,然后嗯,因为前面我们有一个在这里,诶在这个int里面有一个组组方法,我先把它注销了,不然的话,待会呢,它会提示我们方法重复是这意思吧。写到这里,贸易的主方法。给大家演示一下。那么这个时候呢,我给大家演示一个使用,比如说我们现在有个long类型,因为那其实就是四个字节,就四个字节我NUMBER1等于我来一个最大值。比如说我们知道,呃,在这里面浪,在这个浪类型里面呢,如果是四个字节的话,对于有符号的来说,它最大也就这么大,是这样子吧,同学们是不是这么大。如果你超过超过这个值,它就会数据溢出,数据溢出这点在前面已经讲过了,那如果说我们希望这个数比这个还大,就是我们要存一个更大的数怎么办?比如说我加个一,12。
06:03
这前面加了个一,那就变得更大了,这个时候你输出肯定是不会。不会正确的,我们输一下,呃,整形输出要LD啊,就是如果你是浪类型的,前面的这个格式要写LD,就是我加句话。如果。对,如果输出的是no,则,则这个格式应该是L100分号L加D,那现在呢,我把这个NUMBER1输出。其实同学们应该知道,这样输出肯定他会跟我们想象的结果不一样,我们预习一下。我们运行起来肯定会溢出的,因为它只有四个字节,你这样跑起来肯定不对了,你看肯定是溢出了,负的变成。那现在我就希望存这么大一个数,怎么办呢?没问题,加一个no nono类型,那如果是nono类型的话,同学们注意听哈,那前面要加一个,再加一个L。
07:04
我在写,如果咱们输出的是long long这种类型。Long呢,两个呢,那么则它的输出格式是前面写两个L,这里大家注意一下,这时我们再来运行值。同学们可以看到,此时此刻,这个结果就跟我们想的一样了。大家看对不对啊,你看你你这里是这个值,我这里也是一个值正确的,因此提醒大家,如果你要存放一个数据更大的值,可以用nono,最后一个我们再聊一下。嗯,对于我们初学者而言呢,可能对这个bit。还有这个bit呢,不太熟悉,我给大家介绍一下,Bit呢代表胃。代表胃代表这个啊bit如果翻译成翻译成我们这个中文来说呢,它代表一个这个胃。是计算机中最小存储单位,拜呢,它翻译成我们中文来说呢,是代表一个字节能理解,那么它是计算机的基本组成单位,它们之间的关系是什么?我说一下是这样的一个关系。
08:15
啊,是这样一个基本基本的关系啊,我先说一下。他们之间这个关系是就是一个bit。等于八个bit。一个bit等于八个bit,那现在呢,因为这里面又涉及到二进制,所以说二进制呢,因为我们最后再说现在呢,呃,我们我们举一个最简单的例子给大家说一下,这个SHORT3和INT32个存放的都虽然是三,但是在内存里面它是怎么存放的呢?我给大家画一个示意图。开一个示意图啊,示意图是这样子的。呃,如果你是一个short可听,如果你是一个SHORT3,那么他在内存中,在内存中,内存中它占用占用两个字节,还记得吧,两个字节。
09:07
两个字节,如果是两个字节的话,它是这样存的。我写到这里来,他这样做啊。我这样画一下,比如说我这用一个竖杠表示啊,这儿可能画的有点不好看啊,不好看,那这样子我用这个画。画一下吧,同学们不着急啊,那现在呢,比如说我们是,嗯,我们这里存放的是一个SHORT3。那么在我们内存里面,其实相当于有几个字节呢?有两个字节,那就这样画了。嗯,我看看怎么画哈,呃,这个地方。嗯,怎么画呢?我这直接画竖杠吧,这样画相当于在内存里面是这样几个字,一二。三。是。五好,哎,这样子,嗯,啊这个这样有点不好画是。
10:02
六。七。幺八。九。十。好,11。12。十三十三,然后呢,这边有十四十三十三十四。实施。15。好,大家看,如果我现在画成这样子的话,大家大家来数一数,它一共有几个格啊,我们来看一下。呃,换成你看这是一个格一个,这是一个格啊,一一个,呃,这样换,换成一个颜色吧。换成一个红色,这个大家稍微的注意一下,因为对于初学者来说呢,这块确实是有点儿不太明白的。我换一个颜色。好大看这是一个格,一个两个三个四个五个六个七个八个九个十个11 12 13 14 15 16,好,那就多了一个,把这个去掉。
11:06
去掉。那为什么是16呢?大家知道一个short呢,它占两个字节。两个两个字节。好,那么一个字节呢,大家看一个字节呢,又等于八个bit,八个这个bit,所以说你可以理解成。你可以这样理解,就是这一块。同学们看到的,我看用一个什么图标标一下哈。标一下。嗯,我我用这个吐吐吧。就大家看,从这里开始数。给它来一个这样的颜色哈,就是12345678,好,这是这相当于是一个一个字节,然后在下一个字节呢,就这一块。我用另外一个颜色表示,也就是说同学们可以这样去理解,就是这是一个字节。
12:05
这是一个字节,而下面呢,又是一个字节。大家看每个自己是八位,看这是一个两个三个四个五个六个七个八,哎,这还不好意思又画错了,因为这个图有点不太容易画对哈。往这边挪一下好,诶这个对不对啊,我看看。1234567,诶这个没问题啊,刚才。刚才是没问题的啊。我在这边看看啊,一个两个三个四个五个六个七个八个对列好,这边一个两个三个四个五个六个七个八个正确好,也就是说你可以理解成现在是在这里面有两个字节,那么两个字节占了多少呢?就是16位,16位那么这个short它是怎么存的呢?它是这样存的,它前面这些呢,都是零。
13:02
这个是零。好,这个也是零。啊,这是我们稍微慢一点啊,这个因为后面我们还会说,但是现在你要有个基本认识,这边也是零,他在内存里面是存成这个样子的。好,这边挪动一下零,这个也是零。这是零,这也是一个零。在内存里面,这个是这个小空格放的是个零,这边呢也是一个零。好,这边挪动,这边也是一个零。这块也是零。好,这边呢,也是一个零。这块也是一个零,好,最后注意看,最后这个地方呢,它要存一个三,那么这个时候它用二进制表示,这个就代表一,一这边就存一个一,这边又存一个一。什么意思呢?就是它是这样算的,就是第一位就是同学们看到这一位。四个一。哦,这个是个一,这个这个一代表的其实按二技能来说,这个一,这个一其实代表的是个二。
14:05
它怎么算呢?它是这样算的啊,就是相当于是这个值都应该等于第一个一,就你们看到第一个一这个一乘以二的零次方。二的零次方,第一个一再加上第二个一,第二个一是一乘以二的一次方。再加上后面的,后面不都是零吗?就是零乘以二的这个地方,如果是有数的话,就是二的二次方,以此类推,但是后面因为你全部都是零,所以说整个这个结果其实就是一乘以二的零次方,一任何零次方都是一嘛,就是一乘以一,再加上一乘以二。那这个结果就是一加二,然后就等于三,就这样子。它是这么一个流程,好,这个图大家有个印象,我把它先保存下来。好,这是我们药剂的第一张图。这是我们的第一张图。
15:01
好,我把这个图呢,先放到我们的桌面啊,因为待会待会呢老师要有用。好,第一个咱们就说完,那有些同学老师,那第二个呢,同学们看,假如我们是int来存放在内存里面,它是怎么存的呢?假如是int。In特三,那么INT3呢,大家都知道它是四个字节了,对不对,那四个字节大家想一想得到它就应该是几个呢?它就应该是32位了,所以它为什么表示的范围大,也就能清晰的明白了,那如果这样子的话呢,我就复制了。它也是三,但是虽然是三,但是后面其实它还有一节。这样大家看明白了,当然这一截的这个地方也是零,这一方仍然是零。看到没有,也就是说,也就是说在这个英特尔来说,它虽然是三。但是其实它占用的这个空间呢,其实是四个字节。而你这个笑虽然也是三,但是它占用的空间其实是两个字节。
16:03
那大家想一想,想一想,显然当你这个short存到存到最大值的时候,它把前面这个全部都设成最,就全全一的话,就最大值了嘛。权益的最大值,那你再溢出空间只有这么大,你就放不进去了,而我的int不一样,INT14,所以说我存放的数据的范围就会比你大,那么到底多大的范围呢?到底多大范围呢?这样这样就可以算出来了,其实它如果是一个有符号的数,它的范围就是二的,我说一下啊,如果是有符号。有符号。那么它的这个SH的范围就应该是负的。负的,那为什么是负的,因为如果前面是一的话,就表示符号位,后面我们还会讲,大家不用着急啊,这个因为我们现在还没讲到二进制,我就简单的说一下。那么它如果是有号,五号位就是负的,二的多少次方呢?我这写一下二的。
17:05
呃,一共是16位,那么二的十五次方。到。正的。到正的多少呢?锥形到正的二的对也是十五次方。十五次方,但是呢要减一个一啊,也就是说范围呢,就是这样的一个范围,就是我们short能够如果是一个有符号的数,它表示的范围就是负的二的十五次方。到正的二的十五次方减一。那同学们回忆前面我们这个是不是也是要推出来的,你看这。是不是,是不是负的二的十五次方二,正的二的十五次方减一就这么来的,同样道理了,同样道理,那你这个int能表示的范围应该是什么样的范围呢?你想一想也能猜出来了,如果是int,有有符号的int,那么这个地方你想一想你一共是多少位啊,八乘以四。
18:10
本身是32位,但是因为你有一个最高位,就是同学们,你后面会学到这个位呢,是符号位要留下来。为什么要留下,因为符号位要表示是正数还是一个负数,所以说这个地方呢,这个32就变成31了,因为有一个位,最高位要保留乘符号位,同样它这边就也变成了二的31次方。到减一,那你看我们这边是不是也是要推出来的,看这同学们看这里。看屏幕这里啊,你看如果是四个字节的话,你看它的范围是这个,到这儿也是这样推的,负的二的31次方到二的正的二的30次方减一就这么来的,大家通过这个小案例呢,我相信啊,多多少少有一点体会了。我还是那句话,二进制,我们后面还要详讲。
19:02
因为你现在只是,如果是你是没有基础的同学。光讲这么一点呢,可能还是不不理解,后面我们有一个章节会把二进制讲的更加的清晰,只是这里呢,老师讲到了,讲到了我们整数的一个细节的问题,就涉及到一个bit和一和一个bit和一个bit的概念的时候,我跟大家举了一个简单的案例,就是这个。Short,还有还有这个int不同的存放形式,大家能理解我的意思了,对不对?好,所以说我们这再加一句话,INT3 int3在内存中,内存中占用。占用四个字节。是不是四个字节。四个字节。OK,好了,同学们,那关于我们整数的整形的一个细节,我们就聊到这里。
我来说两句