• 二.数据的机器级表示及运算


    一.数制及转换

    1.进位计数制

    数值标识要素=基数+位权,K进制的基数为k,即逢k进1。

    ( N ) k = D m ∗ K m + D m − 1 ∗ k m − 1 + . . . . + D − n ∗ k − n (N)_k=D_m*K^m+D_{m-1}*k^{m-1}+....+D_{-n}*k^{-n} (N)k=DmKm+Dm1km1+....+Dnkn

    二进制: 基数为2【0,1】

    • 公式: ( N ) 2 = D m ∗ 2 m + D m − 1 ∗ 2 m − 1 + . . . . + D − n ∗ 2 − n (N)_2=D_m*2^m+D_{m-1}*2^{m-1}+....+D_{-n}*2^{-n} (N)2=Dm2m+Dm12m1+....+Dn2n
    • 转10示例

    ( 1011.1 ) 2 = 1 ∗ 2 3 + 0 ∗ 2 2 + 1 ∗ 2 1 + 1 ∗ 2 0 + 1 ∗ 2 − 1 = 8 + 2 + 1 + 0.5 = 11.5

    (1011.1)2=123+022+121+120+121=8+2+1+0.5=11.5
    (1011.1)2=123+022+121+120+121=8+2+1+0.5=11.5

    八进制:基数为8【0,1,2,3,4,5,6,7】

    • 公式: ( N ) 8 = D m ∗ 8 m + D m − 1 ∗ 8 m − 1 + . . . . + D − n ∗ 8 − n (N)_8=D_m*8^m+D_{m-1}*8^{m-1}+....+D_{-n}*8^{-n} (N)8=Dm8m+Dm18m1+....+Dn8n
    • 转10示例

    ( 35.7 ) 8 = 3 ∗ 8 1 + 5 ∗ 8 0 + 7 ∗ 8 − 1 = 3 ∗ 8 + 5 ∗ 1 + 7 / 8 = 29.875

    (35.7)8=381+580+781=38+51+7/8=29.875
    (35.7)8=381+580+781=38+51+7/8=29.875

    十六进制: 基数为16【0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)】

    • 公式: ( N ) 16 = D m ∗ 1 6 m + D m − 1 ∗ 1 6 m − 1 + . . . . + D − n ∗ 1 6 − n (N)_{16}=D_m*16^m+D_{m-1}*16^{m-1}+....+D_{-n}*16^{-n} (N)16=Dm16m+Dm116m1+....+Dn16n
    • 示例

    ( 28 A . C ) 16 = 2 ∗ 1 6 2 + 8 ∗ 1 6 1 + A ∗ 1 6 0 + C ∗ 1 6 − 1 = 2 ∗ 256 + 8 ∗ 16 + 10 ∗ 1 + 12 / 16 = 650.75

    (28A.C)16=2162+8161+A160+C161=2256+816+101+12/16=650.75
    (28A.C)16=2162+8161+A160+C161=2256+816+101+12/16=650.75

    2.数制转换

    10进制转2进制

    2进制转16进制

    1011010.10111 = 1011 ‾   1010 ‾   . 1011 ‾   1000 ‾ = 5 A . B 8

    1011010.10111=1011_1010_.1011_1000_=5A.B8
    1011010.10111=10111010.10111000=5A.B8

    二.数值数据的机器表示

    在这里插入图片描述

    1.源码表示法

    在计算机中,数的符号+,-和值一样采用二进制0,1编码

    • 真值: 一般书写时的数
    • 机器数: 机器中的编码

    1.原码表示法: 符号为+用0表示,符号-用1表示

    2.示例

    • [ + 0.1001 ] 原 = 0.1001 [+0.1001]_原=0.1001 [+0.1001]=0.1001
    • [ − 0.1001 ] 原 = 1.0110 [-0.1001]原=1.0110 [0.1001]=1.0110
    • [ + 0 ] 原 = 0.000...0 [+0]_原=0.000...0 [+0]=0.000...0
    • [ − 0 ] 原 = 1.00000 [-0]_原=1.00000 [0]=1.00000

    2.补码表示法

    示例

    • [ + 0 ] = [ − 0 ] = 0.000...0 [+0]=[-0]=0.000...0 [+0]=[0]=0.000...0
    • [ + 0.1001 ] 补 = 0.1001 [+0.1001]_补=0.1001 [+0.1001]=0.1001
    • [ − 0.0110 ] 补 = 1.0111 [-0.0110]_补=1.0111 [0.0110]=1.0111

    性质

    • 补码的零唯一
    • 补码减法看化为加分实现
      • [ x + y ] 补 = [ x ] 补 + [ y ] 补 [x+y]_补=[x]_补+[y]_补 [x+y]=[x]+[y]
      • [ x − y ] 补 = [ x ] 补 + [ − y ] 补 [x-y]_补=[x]_补+[-y]_补 [xy]=[x]+[y]

    3.反码表示法

    示例

    • [ + 0.1001 ] 反 = 0.1001 [+0.1001]_反=0.1001 [+0.1001]=0.1001
    • [ − 0.0110 ] 反 = 1.0110 [-0.0110]_反=1.0110 [0.0110]=1.0110
    • [ + 0 ] 反 = 0.000...0 [+0]_反=0.000...0 [+0]=0.000...0
    • [ − 0 ] 反 = 1.00000 [-0]_反=1.00000 [0]=1.00000

    4.移码表示法

    [ x ] 移 = 2 n + x , − 2 n ≤ x < 2 n [x]_移=2n+x,−2n≤x<2n [x]=2n+x,2nx<2n

    示例

    • [ + 1001 ] = 110001 [+1001]=110001 [+1001]=110001
    • [ − 1001 ] = 00111 [-1001]=00111 [1001]=00111

    三.定点数和浮点数

    1.定点数的表示方法

    在这里插入图片描述
    符号: 使用一位二进制表示,0为正,1为负
    定点数

    • 纯整数: 0 ≤ ∣ x ∣ ≤ 2 n − 1 0≤|x|≤2^{n}-1 0x2n1
    • 纯小数: 0 ≤ ∣ x ∣ ≤ 1 − 2 − n 0≤|x|≤1-2^{-n} 0x12n

    2.浮点数

    在这里插入图片描述
    尾数(M): 表示数的有效位数,即小数点的数
    阶码(E): 表示小数点的位置
    数符(S): 尾数的正负符号(0:正,1:负)
    阶符(E): 阶码的正负符号(0:正,1:负)
    浮点数据表示: N = ( − 1 ) s M R E N=(-1)^sMR^E N=(1)sMRE

    • 浮点数运算结果在不同芯片上不一致

    3.浮点数IEEE754标准

    IEEE754标准采用三元组{S,E,M}表示浮点数 N = ( − 1 ) s M R E N=(-1)^sMR^E N=(1)sMRE
    在这里插入图片描述
    单精度浮点数: N共32位,S占1,E占8,M占23
    在这里插入图片描述
    双精度浮点数: N共64位,S占1,E占11,M占52
    在这里插入图片描述

    当E的二进制位不全为0,1时: e = E − b i a s , b i a s = 2 k − − 1 e=E-bias,bias=2^{k-}-1 e=Ebias,bias=2k1

    • k:E的位数 ,bias:偏移量
    • 单精度k=8,bias=127
    • 双精度k=11,bias=1023

    示例: 453.6875转换为IEEE754浮点数

    ( 43.6875 ) 1 0 = ( 101011.1011 ) 2 = 1.010111011 ∗ 2 5 , e = 5 S = 0 , E = 5 + 127 = 132 , M = 010111011

    (43.6875)10=(101011.1011)2=1.01011101125,e=5S=0,E=5+127=132,M=010111011
    (43.6875)10=(101011.1011)2=1.01011101125,e=5S=0,E=5+127=132,M=010111011

    其单精度浮点数表示: 0   ( 10000100 ) 2 ( 132 ) 10   ( 01011101100000000000000 ) 2 ( M ) 2 \frac{0}{}{\:}\frac{(10000100)_2}{(132)_{10}} {\:}\frac{(01011101100000000000000)_2}{(M)_2} 0(132)10(10000100)2(M)2(01011101100000000000000)2
    示例: ( 41360000 ) 16 (41360000)_{16} (41360000)16求10进制浮点数

    ( 41360000 ) 16 = ( 0   10000010   01101100000000000000000 ) 2 S = 0 , m = 1. M = 1.011011 e = E − 127 = 10000010 − 01111111 = 00000011 = ( 3 ) 10 x = ( − 1 ) s ∗ m ∗ 2 e = + 1.011011 ∗ 2 3 = + 1011.011 = ( 11.375 ) 10

    (41360000)16=(01000001001101100000000000000000)2S=0,m=1.M=1.011011e=E127=1000001001111111=00000011=(3)10x=(1)sm2e=+1.01101123=+1011.011=(11.375)10
    (41360000)16=(01000001001101100000000000000000)2S=0,m=1.M=1.011011e=E127=1000001001111111=00000011=(3)10x=(1)sm2e=+1.01101123=+1011.011=(11.375)10

    四.非数值数据机器表示

    1.二进制码的十进制数

    BCD码: 将十进制数的每个十进制数值编码成一个4位的二进制数

    BCD编码0000000100100011010001010110011110001001
    十进制数0123456789
    符号BCD编码
    正数1100
    负数1101
    无符号数1111

    示例: -1265的BCD编码

    ( 1265 ) 10 = ( 0001   0010   0110   0101 ) 2 ( − 1265 ) 10 = ( 0001   0010   0110   0101   1101 ) 2

    (1265)10=(0001001001100101)2(1265)10=(00010010011001011101)2
    (1265)10=(0001001001100101)2(1265)10=(00010010011001011101)2

    2.字符编码

    2.1.EBCDIC码在这里插入图片描述

    2.2.ASCLL码

    ASCLL定义了10个十进制数字,52个英文字母,32个控制字符,32个特殊符号

    2.3.统一字符编码标准

    Unicode: 以16进制为标准,提供了扩展进制。

    • 美式计算机唯一使用的字符编码
    字符类型字符集说明字符数目十六进制数据集
    字母表拉丁字母,希腊字母81920000-FFFF
    符号特殊符号,数值符号40962000-2FFF
    CJK中文,日文.韩文等40963000-3FFF
    Han统一的中文,日文,韩文409604000-DFFF
    Han扩展4096E000-EFFF
    自定义4095F000-FFFF

    2.4.汉字表示

    输入方式

    • 数字编码: 数字串代表汉字输入码,区位码代表国家公布的94个分区
    • 拼音码: 以汉语拼音为基础的输入方式
    • 字形编码: 以汉字形状进行编码

    汉字编码:

    • 手机等移动端至少支持GB2312-80
    • PC端至少支持 GB18030

    汉字字模码:
    在打印和显示时,将汉字作为一个图形元素,图像通过n*n点阵来实现

    五.定点数运算及实现

    1.补码加减

    • 补码表示的两个整数进行计算结果为补码
    • [ x 补 + y 补 ] = [ x ] 补 + [ y ] 补 [x_补+y_补]=[x]_补+[y]_补 [x+y]=[x]+[y]
    • [ x 补 − y 补 ] = [ x ] 补 + [ − y ] 补 [x_补-y_补]=[x]_补+[-y]_补 [xy]=[x]+[y]
    • 符号位与数值一同进行计算

    [ x 补 − y 补 ] = [ x ] 补 + [ − y ] 补 [ 0.1001 + ( − 0.0110 ) ] 补 = 0.1001 + 1.1010 = 0.0011

    [xy]=[x]+[y][0.1001+(0.0110)]=0.1001+1.1010=0.0011
    [xy]=[x]+[y][0.1001+(0.0110)]=0.1001+1.1010=0.0011

    2.加减溢出判别

    符号判别法: 当符号相同的数相加的结果符号不同,则溢出
    进位位判别法: 当两个补码相加,符号最高位和数值最高位不同则溢出
    在这里插入图片描述

    双符号位法: 当两个正数相加,若两个返回位相同时则无溢出。
    在这里插入图片描述

    3.定点数乘法运算

    1001    ∗   1101 ‾ 1001     0000   1001      1001    1001 ‾ 01110101

    10011101_10010000100110011001_01110101
    100111011001000010011001100101110101

    3.1.原码一位乘法

    原码参与计算

    • 符号位与数值部分分开进行运算

    3.2.补码一位乘法

    补码直接参与计算

    • 符号位直接参与计算

    [ x y ] 补 = [ x ] 补 ( − y 0 + 0 , y 1 y 2 . . . . y n ) = [ x ] 补 ( − y 0 + 2 − 1 y 1 + 2 − 2 y 2 + . . . . + 2 − n y n ) = [ x ] 补 [ − y 0 + ( y 1 − 2 − 1 y 1 ) + ( 2 − 1 y 2 − 2 − 2 y 2 ) + . . . + ( 2 − n + 1 y n − 2 − n y n ) ] = [ x ] 补 [ ( y 1 − y 0 ) + 2 − 1 ( y 2 − y 1 ) + . . . + 2 − n + 1 ( y n − y n − 1 ) + 2 − n ( 0 − y n ) ]

    [xy]=[x]y0+0,y1y2....yn)=[x](y0+21y1+22y2+....+2nyn)=[x][y0+(y121y1)+(21y222y2)+...+(2n+1yn2nyn)]=[x][(y1y0)+21(y2y1)+...+2n+1(ynyn1)+2n(0yn)]
    [xy]=[x]y0+0,y1y2....yn)=[x](y0+21y1+22y2+....+2nyn)=[x][y0+(y121y1)+(21y222y2)+...+(2n+1yn2nyn)]=[x][(y1y0)+21(y2y1)+...+2n+1(ynyn1)+2n(0yn)]

    4.定点除法运算

    x = 0.1011 , y = 0.1101 , 计 算 x / y x=0.1011,y=0.1101,计算x/y\\ x=0.1011,y=0.1101,x/y

    4.1 原码一位除法

    原码参与计算

    • 符号位与数值部分分开进行运算

    4.2 补码一位除法

    补码直接参与计算

    • 符号位直接参与计算

    六.浮点数计算

    1.浮点数的加减计算

    二进制浮点数表示 N = 2 E M N=2^EM N=2EM
    计算流程

    对阶
    尾数运算
    结果规范化
    舍入处理
    溢出判断
  • 相关阅读:
    思源笔记的优缺点 vs Obsidian vs Logseq vs Trilium
    SpringBoot 实现 excel 全自由导入导出,性能强的离谱,用起来还特优雅
    JavaScript运算符与优先级
    【计算机毕业设计】Node.js商城APP-97200,免费送源码,【开题选题+程序定制+论文书写+答辩ppt书写-原创定制程序】
    数商云SRM系统询比价有何优势?供应商平台助力汽车零部件企业快速查找供应商
    启明智显分享|基于ESP32-S3方案的4寸86盒开发板快速开发及烧录
    神经网络-使用Sequential搭建神经网络
    程序员这个职业会在10年内被AI淘汰吗?
    h5st 4.3版本代码研究
    jdk动态代理实现通用日志记录—KQC 0921
  • 原文地址:https://blog.csdn.net/tyh751734196/article/details/125623115