计算机基础:二进制基础01,比特与字节

server/2025/2/27 10:27:02/

专栏导航

本节文章分别属于《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笔记:本专栏课件

回到目录

下一篇:无


http://www.ppmy.cn/server/171008.html

相关文章

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…

python单例模式魔法方法

1.__init__()和__new__() 1.1__init__():初始化对象 上篇文章提到过 1.2__new__():object基类提供的内置静态方法 作用:1.在内存中为对象分配空间 2.返回对象的引用 注意:重写__new__()一定要return super().__new__(cls),否则python解释器得不到分…

Fisher信息矩阵(Fisher Information Matrix,简称FIM)

Fisher信息矩阵简介 Fisher信息矩阵(Fisher Information Matrix,简称FIM)是统计学和信息理论中的一个重要概念,广泛应用于参数估计、统计推断和机器学习领域。它以统计学家罗纳德费希尔(Ronald Fisher)的名…

【笔记ing】C语言补充、组成原理数据表示与汇编实战、操作系统文件实战(高级阶段)

【第19节 C语言语法进阶】 【19.1 条件运算符与逗号运算符】 1 条件运算符 条件运算符是C语言中唯一的一种三亩运算符。三目运算符代表有三个操作数;双目运算符代表有两个操作数,如逻辑运算符就是双目运算符;弹幕运算符代表有一个操作数&a…

Rk3568驱动开发_点亮led灯(手动挡)_5

1.MMU简介 完成虚拟空间到物理空间的映射 内存保护设立存储器的访问权限,设置虚拟存储空间的缓冲特性 stm32点灯可以直接操作寄存器,但是linux点灯不能直接访问寄存器,linux会使能mmu linux中操作的都是虚拟地址,要想访问物理地…

动态规划_01背包

2915. 和为目标值的最长子序列的长度 给你一个下标从 0 开始的整数数组 nums 和一个整数 target 。 返回和为 target 的 nums 子序列中,子序列 长度的最大值 。如果不存在和为 target 的子序列,返回 -1 。 子序列 指的是从原数组中删除一些或者不删除任…

TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力开发分支调整

2025年春节假期已过,大家都带着慢慢的活力回到了工作岗位。为了让大家在新的一年继续感受到 Tiny Engine 的成长与变化,我们很高兴地宣布:TinyEngine v2.2版本正式发布!本次更新带来了重要的功能增强------页面支持嵌套路由&#…

【网络系列】SSRF攻击

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…