1 什么是位?
Bit(二进制数字的缩写)翻译成中文为“二进制数”、“二进制数”或简称为“位”。
Bit只有2个值:0和1,一般没有大小。
正如 DNA 是人体组织的最小单位,原子是物质的最小单位一样,比特是数字信息的最小单位。
数值、字符、符号、图像、声音、命令……都可以用比特来表示。
2位的三种基本逻辑运算
位的值“0”和“1”可以代表两种不同的状态(例如电位的高/低,开关的关/开)。
位的运算使用逻辑代数,有3个基本的逻辑运算:
逻辑加法(也称为“或”运算,用符号“OR”、“∨”或“+”表示)。
逻辑乘法(也叫“AND”运算,用符号“AND”、“∧”或“·”表示,也可以省略)。
求反(也称为“非”运算,用符号“NOT”或上横杠“¯”表示)。
当对两个多位二进制信息进行逻辑运算时,它们是逐位独立进行的,即每个位不受其他位的影响:
示例 1
A:0110 ∨ B:1010 F: 1110
示例 2
A: 0110∧ B: 1010 F: 0010
3 位在计算机中是如何表示的?
表示一个位需要使用两种状态:
电路(CPU)的高态或低态
电容器(RAM)的充电或放电状态
两种不同的磁化状态(磁盘)
圆盘(圆盘)表面的凹凸状态
…
4 位存储
存储(记忆)1位需要使用具有两种稳定状态的元件,如开关、灯泡等。
4.CPU 中的 1 位存储
在计算机的 CPU 中,使用称为“触发器”的双稳态电路存储位。
触发器有两种状态,可以分别用来存储0和1。一个触发器可以存储一位。
一组(例如 8 个或 16 个)触发器可以存储 1 组位,称为“寄存器”。
一个CPU中有几十个甚至上百个寄存器。
断电后信息不再保留,是易失性存储器!
4.2 位存储在内存中
电容器在计算机内存中用于存储二进制信息:当电压施加到电容器的两个极时,它就会被充电。去掉电压后,充电状态还可以维持一段时间,所以可以用一个电容来存储1位。
电容C充电时表示1
当电容C处于放电状态时,表示0
集成电路技术可以在一个半导体芯片上制造出数十亿个微型电容器,从而形成可以存储大量二进制信息的半导体存储芯片。
停电后信息不再保留!
4.外部存储器中的 3 位存储
磁盘:利用磁介质表面区域的磁化状态来存储二进制信息。
光盘:只读光盘通过“雕刻”在光盘表面的微小凹坑记录二进制信息。
断电后信息可保留,非易失性内存!
5 个存储容量的计量单位
8位=1字节(字节,用大写B表示)
计算机内存容量的计量单位:
KB: 1 KB=2^10字节=1024 B (千字节) MB: 1 MB=2^20字节=1024 KB(兆字节) GB: 1 GB=2^30字节=1024 MB(吉字节、千兆字节) TB: 1 TB=2^40字节=1024 GB(太字节、兆兆字节)
外部存储器容量通常使用 10 的幂来计算:
1MB=10^3 KB =1 000 KB 1GB=10^6 KB =1 000 000 KB 1TB= 10^9 KB = 1 000 000 000 KB
使用不同的基本前缀:
内存、缓存和半导体内存芯片的容量都使用二进制前缀:
512MB 记忆棒 (1M=2^20)
256KB 缓存 (1K=2^10)
文件和文件夹的大小使用二进制前缀。
对频率、传输率等使用十进制前缀:
主频1GHz(1G=10^9)
传输速率100Mbps(1M=10有^6)
外接存储容量(硬盘、DVD盘、U盘、存储卡等):
制造商标记的容量使用十进制前缀。
操作系统显示的容量使用二进制前缀。
6位传输
信息是可以传递的,信息只有通过传递和交流才能发挥作用。
在数字通信技术中,信息的传输是通过比特的传输来实现的。
短距离传输时:直接传输用来表示“0/1”的电或光信号(称为基带传输),例如:
计算机读取或写入移动硬盘中的文件。
使用打印机打印文档的内容。
对于长距离传输或无线传输:需要调制技术。
比特传输率:
传输率表示每秒可以传输的二进制位数。常用单位为:
比特/秒(b/s),也称“bps”。如 2400 bps(2400b/s) 千比特/秒(kb/s),1kb/s=103比特/秒=1 000 b/s 兆比特/秒(Mb/s),1Mb/s=106比特/秒=1 000 kb/s 吉比特/秒(Gb/s),1Gb/s=109比特/秒=1 000 Mb/s 太比特/秒(Tb/s),1Tb/s=1012比特/秒=1 000 Gb/s
8个不同基础系统的表示和意义
“数字”是一种信息,它有大小(数值),可以进行四次算术运算。
“数字”有不同的表示。人们在日常生活中使用十进制数,但计算机使用二进制数,程序员也使用八进制和十六进制数。他们是如何代表的?它的值是如何计算的?
8.1 个十进制数
每个数字可以用十个不同的数字表示(0、1、2、3、4、5、6、7、8、9).
低位和高位的关系是:每10个1个。
每个位的权重是 10 的整数幂(以 10 为底)。
标志:尾部带有“D”或默认值。
例子:
204.96=2×10^2+0×10^1+4×10^0+9×10^-1+6×10^-2
8.2 二进制
每个位由两个不同的数字表示(0、1),即每个位由 1 个“位”表示。
低位和高位的关系是:每2进1。
每个位的权重是2的整数幂(以2为底)。
符号:末尾加B
例子:
101.01 B =1×2^2+0×2^1+1×2^0 +0×2^-1+1×2^-2 =5.25
8.3 个十六进制数字
用十六进制数表示二进制数,相当于二进制数,更直观9bh的补码,因为4个二进制数可以用1个十六进制数表示,因为二进制的1111等于十进制的15,也就是十六进制的F 十进制和二进制位数不如十六进制方便,一位十进制大约相当于3.2位二进制数。
每个数字由十六个数字和符号表示(0、1、2、3、4、5、6、 7、8、9、A、B、C、D、E、F)。
对于每 16 个,基数是 16。
每个位的权重是 16 的整数幂(以 16 为底)。
符号:在末尾添加 H。
例子:
F5.4H=15×16^1 + 5×16^0 + 4×16^-1 = 245.25
8.4 个八进制
一个八进制数可以表示三个二进制数,因为二进制的111也是八进制的7。
每个数字由八个不同的数字表示(0、1、2、3、4、5、6、7).
低位和高位的关系是:每8进1。
每个位的权重是 8 的整数幂(以 8 为底)。
符号:在末尾添加 Q。
例子:
365.2Q = 3×8^2+ 6×8^1+ 5×8^0 + 2×8^-1 = 245.25
9 不同基数的转换
精通不同基数之间的转换,在编写程序和设计数字逻辑电路时非常有用。
只要你学会二进制数和十进制数之间的转换,八进制和十六进制数的转换就很容易了。
9.1个十进制数→二进制数
转换方式:
整数和小数分开转换。
整数部分:除以2,取余数倒序
小数部分:乘以2并向上取整
示例:29.6875→11101.1011 B
注意:十进制小数(如0.63)转换时会出现二进制无限小数,此时只能取近似值。
9.2 二进制数→十进制数
转换方式:
二进制数的每一位乘以它对应的权重,然后累加得到它的十进制值。
示例:11101.1011B
= 1×2^4+1×2^3+1×2^2+0×2^1+1×2^0
+1×2^-1+0×2^-2+1×2^-3+1×2^-4
= 29.6875
9.3 八进制和二进制的互换
八进制→二进制:将每个八进制数重写为等效的3位二进制数,保持高低位顺序不变。
例如:2467.32Q → 010 100 110 111 。 011 010 乙
二进制→八进制:整数部分从低位到高位每 3 位替换为等效的八进制数。不足3位时,补高位0补3位;小数部分是从高位到低位。每 3 位数字使用一个,将其替换为等效的八进制数。如果少于3位,则在低位加0,补到3位。
示例:1 101 001 110.110 01 B → 001 101 001 110.110 010 B
→ 1516.62 Q
9.4 十六进制与二进制数的互换
转换方法:类似于八、二进制交换的方法。
示例1:35A2.CFH → 11 0101 1010 0010.1100 1111B
示例 2:11 0100 1110.1100 11B → 34E.CCH
PC 中的 10 种主要数字类型
所有都以二进制表示,具有不同的类型和长度。
不同类型和长度的数字有不同的用途。
10.1 个无符号整数表示
10.2 有符号整数表示
二进制补码中负数的绝对值如何表示?
首先,用自然码表示。
反转自然码的每一位。
将“1”添加到最低有效位。
4位补码方案可以表示的数据范围:
10.3原码与补码优缺点分析
原始代码符号:
优点:与每日十进制表示一致,简单直观。
缺点:加减法规则不统一,增加了成本;整数0有“00000000”和“10000000”两种表示,不方便。
补码:
优点:加减运算规则统一,没有“-0”,能表示的数比原码多一(-2n-1)。
缺点:不直观,不方便人们使用。
10.原码和补码可以表示的4个整数范围
原代码可以表示的整数范围:
8位原码:-27+1~27-1(-127~127)
16位原码:-215+1~215-1(-32767~32767)
n位原码:-2n-1+1~2n-1-1
二进制补码可以表示的整数范围:
8位补码:-27~27-1 (-128~127)
n位补码:-2n-1~2n-1-1
– 128 是 10000000
+127 是 01111111
10.5 计算机中整数表示的比较
计算机中有很多种整数。当相同的二进制代码表示不同类型的整数时,它们的含义(值)可能不同。
代码代表什么样的整数(或什么)由指令决定。
10.6 实数的特征和表示
实数有整数部分和小数部分,小数点的位置不固定。
任何实数都可以表示为幂和纯小数的乘积。
例子:
56.725 = 0.56725×10^2
-0.0034756 = -0.34756×10^-2
实数的表示方法(标度法/浮点表示法):由3部分表示:
幂中的指数(也称为指数):表示实数中小数点的位置。
纯小数部分(尾数):表示实数的有效数字部分。
数字的符号(sign)。
二进制实数的浮点表示:
与十进制实数一样,二进制实数也可以用顺序表示法表示,例如:
+1001.011B = + 0.1001011B×2^100
-0.0010101B =-0.10101B×2^-10
可以看出,任意二进制实数N都可以表示为:
N=±S×2P
(其中±是数字的符号;S是N的尾数;P是N的指数)
因此,一个 32 位的单精度浮点数在计算机中可以表示为:
由于指数(序号)可以选择不同的代码(原码、补码等),尾数的格式和小数点的位置也可以不同,所以早期计算机中的浮点数彼此不同。
在现代计算机中,浮点数通常存储在 IEEE 754 标准中。该标准以以下形式存储在内存中:
对于不同长度的浮点数,指数和小数位数不同。例如,对于 32 位单精度浮点数,数字分配 1 位,指数分配 8 位,尾数分配 23 位。位:
符号位:0表示正; 1 表示否定;
偏移指数 e:e=指数的实际值 + 127。
如果有浮点数10110010.001,则指数为7,指数应用7+127的二进制数表示,即:111+01111111 = 10000110
尾数用原码表示,绝对值在1到2之间,其中1和小数点是隐含的,不直接表示。
根据这个标准,让我们尝试将十进制浮点数转换为 IEEE754 标准表示。
示例:178.125
先将浮点数的整数部分和小数部分转为二进制:
整数部分除以2得到余数:10110010
小数部分乘以2并四舍五入得到:001
合:10110010.001
转换为二进制浮点数9bh的补码,即小数点只移到整数位1,即:1.0110010001 * 2^111,111是二进制,因为左移7位,所以是111
p>
浮点数转换为二进制后,这里基本可以得到三部分对应的值:
数字符号:由于浮点数为正数,所以为0(负数为1)。
订单代码:订单代码的计算公式:订单+偏移量,订单代码需要移位。转换后的二进制数中,序号为111(十进制为7),对于单精度浮点数,偏移值为01111111(127)[偏移的计算为:2 ^(e-1)-1, e为订单码位数,为8,所以偏移值为127],即:111+01111111 = 10000110
尾数:小数点后的数字,即0110010001
最后根据职位填写:
可能会有一个问题:小数点前的1去哪儿了?由于尾数部分被归一化,最高位始终为“1”,所以直接隐藏,同时节省1位存储小数,提高精度。
浮点数的二进制显示可以使用如下代码:
#include #include //STL的bitset模板类 using namespace std; void main() { union { float input; int output; } data; data.input = 178.125; std::bitsetbits2(data.output); //bitset模板类定义对象,内为长度,()为值 //如bitset bitset2(12); //长度为8,二进制保存,前面用0补充 std::cout << bits2 << std::endl; system("pause"); } //01000011001100100010000000000000
-结束-
暂无评论内容