计算机基础:二进制基础01,比特与字节
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:WIn32 笔记:本专栏课件
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:MFC笔记:本专栏课件
回到目录
下一篇:无
本节前言
本来呢,在写作本节之前,我想要讲解位运算的知识来着。可是,想了想,有可能,许多学习计算机编程的人,还对二进制知识尚不熟悉。而我们想要学习位运算的知识,我们就需要先对二进制,八进制,十六进制的知识,有一定的了解。所以呢,我才决定花费几节的篇幅,来讲解一下二进制,八进制,十六进制等等进制的知识。
注意啊,本节,以及随后的几节,我都将以二进制基础作为标题的一部分,然而,我这里的二进制基础,不仅仅包含二进制数,也会包含有八进制,十六进制数的知识。
本篇文章,既会包含在 Win32 专栏里面,也会包含在 MFC 专栏里面。我认为,在这俩专栏里面,包含有一些个偏向系统底层的知识,是必要的。
而进制的知识,我认为,它属于一种系统底层的知识。学习数字电路需要了解它,学习微机接口,汇编语言,都需要了解它。
如果你去学习 Linux内核,那么,你很有可能会遇到许多的有关位运算的代码。无论是在 C 语言代码文件里面,还是在汇编语言源文件里面,你都有可能会遇到位运算的代码。如果你不了解位运算的知识,那么,好多的代码,我估计,你是看不懂的。而想要学会位运算的知识,我认为,一个必要的基础,就是二进制,八进制,十六进制等等的进制知识。
Win32 API,或者时髦一点,Windows API,里面也是经常会用到位运算的知识。MFC 是对 Windows API 的一种封装,里面也会遇到许多的位运算代码。所以呢,学习 WIndows API 知识,学习 MFC 知识,我们是需要了解位运算的知识的,我们也需要学习更为基础的进制知识。
在 Win32 和 MFC 知识里面,不仅会涉及位运算的知识,也会涉及字符串操作函数,会用到链表,顺序表的知识,会用到递归算法,还会用到数学三角函数的知识。
所以,我想,Win32 与 MFC 的学习,它其实是一个综合性很强,难度很高的一种学习。所以,在正式开始学习 Win32 与 MFC 的知识之前,或者是已经开始学习了,在这种情况下,我认为,大家有必要作出一番心理准备。
没有足够的耐心,没有攻克难点知识的准备,这一块知识,大概你很难将其学好。
在讲解 Win32 与 MFC 的知识的时候,如果我认为,某一块知识,是大家需要具备的基础知识点,那么,我会去讲解它。我也希望,大家在学习 Win32 与 MFC 知识的时候,能够将必要的计算机基础知识,都给学习好。
进制知识,位运算,字符串操作函数,有可能,有的同学已经学习过了。有可能,有的同学尚未学习过。在这里,我统一地来进行讲解。以便,尚未学习过这些知识的同学,能够具备必要的基础。
本节的前言部分很长,下面,我们开始本节的正文。
一. 数字电路与0,1
我们目前使用的计算机,基本上都是数字计算机,也就是采用数字电路知识,制作出数字集成电路芯片,CPU。并且以CPU为核心,组建起一台完整的计算机。
与数字集成电路相对的,还有另外一种集成电路芯片,那就是模拟集成电路芯片。这个,不是我们要讲述的重点,大家了解一下即可。
在数字电路中,保存一个数据的最小的单位是bit,翻译为比特。一个比特,可能是两个数之一,一个是 0,一个是 1。一般情况下,用 1 来表示高电压,用 0 来表示低电压。这叫做正逻辑。
有时,我们也将一个比特,称作一个位。或者,在我的讲解中,我也经常将比特与位这两个概念连起来使用,把它叫做比特位。
还有另外一种叫做负逻辑的东西,它用 0 来表示高电压,用 1 来表示高电压。
在我们这里,我们使用的,是正逻辑。
我们将一组组合在一起,将其成为码,英文为code。用这样的码来表示数字,字母,符号,指令等等对的东西。
在计算机当中,存储数据的最小单位是比特,而基本单位,则是字节,英文称作 byte 。将 8 个连续的比特位组合在一起,就构成了一个字节。
比如说, 0010 1011,我们将其看作是一个二进制数。由于上面的二进制有 8 个,所以,正好是一个字节。
由于一个比特,它是用来表示一个二进制数的状态的,而且二进制数,可以包含不同的数位。就像我们常用的十进制数可以包含着个位,十位,百位一样。所以呢,我们可以一个二进制数中的某一位,称作是一个二进制位。至于这个位叫什么,我们以后会讲。
在 C 语言中,有两种数据类型,可以用于对字节类型的数据进行建模。它们分别是 signed char 和 unsigned char。在基础的 C 语言和 C++ 的学习中,我们会用到 char 这一数据类型,而很少用 signed char 或者 unsigned char 来声明变量。
char 类型,在不同的编译器中,定义不同。有的编译器,将 char 对应为 signed char。在我们的讲解中,我们采用这一假定,认为 char 就是signed char。
在 C 语言中,除了单字节的 char 类型之外,还有双字节类型的变量,4字节类型的变量,和8字节类型的变量。
一般地,双字节类型类型的变量,用 signed short 或 unsigned short 来声明。其中,signed short 为带符号短整型,unsigned short 为无符号短整型。signed short,简记为 short。不论是否带符号,短整型,都是占据着两个字节。
一个字节,为 8 个比特。一个字节,包含 8 个二进制位。
两个字节,为 16 比特,它是 16 个连续的比特位组合在一起,而构成的,用来保存数据的东西。两个字节,包含 16 个二进制位。
四个字节类型的变量,用 signed int 或者 unsigned int 来声明。其中,signed int 表示带符号整型,unsigned int 为无符号整型。signed int 简记为 int。无论是否带有符号,整型变量,都是占据着4个字节的大小。
四个字节,它是 32 个连续的比特构成的,用来保存数据的东西。四个字节,包含 32 个二进制位。
以上所述,signed char 与 unsigned char,signed short 与 unsigned short,signed int 与unsigned int,都是用来存储整数的变量。C 语言和 C++ 除了可以表示整数之外,也可以表示浮点数。
在 C 语言中, doubole 类型的变量,占据着 8 个字节。double 类型的变量,属于是浮点型变量。
八个字节,它是 64 个连续的比特构成的,用来保存数据的东西。八个字节,包含 64个二进制位。想要
在学习汇编语言知识,学习英特尔单指令多数据(SIMD,Single Instruction Multiple Data)指令时,我们可能还会接触到 128 位的数据类型。128 位的数据类型,据我所知, C 语言里面,还没有这一数据类型。汇编语言里面,会有这一部分的知识。
二. 二进制有什么用?
我们为何要去学习二进制?因为计算机就是用二进制,来表示数据的。
为什么要用二进制来表示数据呢?
在计算机中,在数字电路中,一般地,会采用两种电平,来表示某一个比特的状态,高电平或低电平。既然只有两种状态,那么,我们就可以用 0 和 1 来表示它们。
所谓的高低电平,它是说,在数字电路中,将某一个电压范围内的电压值,视为高电平,将另一个电压范围内的电压值,视为低电平。比如说,我们将2~3.3V 的电压范围,规定为 高电平。将 0~0.8V 的电压值,规定为低电平。
高低电平说完了,我们发现,其中还有 0.8~2V 的空挡。这个空挡,怎么处理呢?办法就是,不让它出现。只允许出现高电平和低电平所对应的电压值范围。
到这里,高低电平,我就讲完了。
表示单一比特的状态,可以用一位的二进制数来表示。表示连续的 8 个比特的电平状态,我们可以用 char 型整数来表示它。表示连续的 32 个比特的电平状态,我们可以用 unsigned int 类型的整数来表示它。
由于二进制数与数字电路中的高低电平可以一一对应,所以,我们可以很方便地用二进制数来表示数字电路的状态,并且也可以很方便地用二进制数来表示数字电路的逻辑运算。
二进制,它是计算机的基础逻辑。学习二进制,是为了了解计算机的逻辑。
同时呢,学习二进制知识,可以为后面的位运算知识打下基础。
结束语
本节知识,希望大家能学好。
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:WIn32 笔记:本专栏课件
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:MFC笔记:本专栏课件
回到目录
下一篇:无