计算机组成原理笔记(九)——2.5不同类型的数据表示举例

2.5.1C语言中的数据表示

一、整数类型表示

在C语言中,整数类型分为 有符号整数(如short, int, long无符号整数(如unsigned short, unsigned int。它们的存储方式和数值范围由二进制位宽及编码规则决定。

1. 整数的存储机制

  • 补码表示:计算机中存储有符号整数时,统一采用 补码(Two’s Complement),原因是补码可以消除原码和反码中“+0”与“-0”的冗余,并简化加减法运算。
    • 正数补码:与原码相同,直接存储二进制。
    • 负数补码:符号位为1,绝对值部分按位取反后加1。

示例:int a = -5的补码表示 (32位):

原码:1000 0000 0000 0000 0000 0000 0000 0101  
反码:1111 1111 1111 1111 1111 1111 1111 1010  
补码:1111 1111 1111 1111 1111 1111 1111 1011  

最高位为符号位,其他位为数值位。

2. 无符号整数与有符号整数对比

在这里插入图片描述

3. 常见整数类型范围

类型位宽(32位系统)数值范围
short16位-32768 ~ 32767
unsigned short16位0 ~ 65535
int32位-2³¹ ~ 2³¹-1
unsigned int32位0 ~ 4,294,967,295
long long64位-2⁶³ ~ 2⁶³-1

二、浮点数类型表示

C语言的浮点数遵循 IEEE 754标准,用科学计数法表示实数,包含 单精度(float, 32位)双精度(double, 64位)

1. IEEE 754结构分解

在这里插入图片描述

  • 符号位(S):0表示正,1表示负。
  • 阶码(E):采用 移码(Biased Exponent),偏置值=127(单精度)/1023(双精度)。
  • 尾数(M):隐含最高位1的规格化小数部分,存储时省略前导的1。

公式 ( − 1 ) S × ( 1. M ) × 2 E − 偏置值 (-1)^S \times (1.M) \times 2^{E - \text{偏置值}} (1)S×(1.M)×2E偏置值

2. 浮点数的存储示例

以单精度浮点数float f = -8.25为例:

  1. 十进制转二进制 − 1.00001 × 2 3 -1.00001 \times 2^3 1.00001×23
  2. 编码过程
    • 符号位:1(负数)
    • 阶码:偏置值127 + 3 = 130 → 10000010₂
    • 尾数:00001000000000000000000(23位)

十六进制结果C1040000H(按二进制分段为符号+阶码+尾数)。

三、类型转换与精度问题

在混合运算中,C语言遵循 隐式类型提升规则,低精度类型向高精度类型转换,避免数据丢失。

1. 整型与浮点型转换

在这里插入图片描述

2. 精度损失示例

floatint,直接丢弃小数部分:

float f = 3.1416;
int n = f;  // n = 3

四、数据校验码:奇偶校验

为保证数据完整性,计算机采用校验码检测错误。简例:

  • 奇校验:二进制数据中1的个数为奇数。
  • 偶校验:二进制数据中1的个数为偶数。

应用场景:存储器校验、网络通信。

五、总结

  • 整数:补码统一符号处理,无符号整数扩大数值范围。
  • 浮点数:科学记数法编码,分离符号、阶码、尾数。
  • 类型转换:遵循隐式规则,注意精度损失风险。

通过理解底层存储机制,开发者能更精准地选择数据类型,避免溢出和计算误差。

2.5.2现代微型计算机系统中的数据表示

一、基本数据类型与存储规范(基于IA-32架构)

所有数据以二进制形式存储,按格式分为:

在这里插入图片描述

二、整数表示详解

1. 无符号整数

  • 特征:全二进制位用于数值,无符号位

  • 示例

    0xA3 (1 Byte) -> 161(十进制)
    
  • 数值范围

类型范围
BYTE(8 bit)0 ~ 255
WORD(16 bit)0 ~ 65,535
DWORD(32 bit)0 ~ 4,294,967,295

2. 带符号整数(补码表示)

  • 核心规则

    • 正数:直接存储原码
    • 负数:原码取反+1,符号位扩展
  • 特殊案例

    -5的32位补码表示:
    原码:1000 0000 ... 0101 → 
    反码:1111 1111 ... 1010 →
    补码:1111 1111 ... 1011
    
  • 数值范围

类型范围
DWORD(32 bit)-2³¹ ~ 2³¹-1(-2147483648~2147483647)

三、浮点数表示(IEEE 754标准)

在这里插入图片描述

  • 编码公式
    Value=(−1)S×1.M×2E−127Value=(−1)S×1.M×2E−127
  • 存储示例
    浮点数-8.25的编码过程:
    1. 1.二进制转换:-1000.01 → 规范化为-1.00001 × 2³

    2. 2.编码结果:

      Sign=1, E=130(10000010b), M=00001 (填充23位)
      → 十六进制:C1040000H
      

四、数据存储方式对比(大端 vs 小端)

编码方式特征典型应用
大端(BE)高位字节在低地址 (0x12 34 → 12 34)网络传输、SPARC
小端(LE)低位字节在低地址 (0x12 34 → 34 12)x86、ARM(默认)

五、高级数据类型与对齐

  1. 1.数据对齐规则

    • 内存地址需为数据类型大小的整数倍(如DWORD需4字节对齐)
    #pragma pack(2) // 强制2字节对齐
    struct Data {
        char a;   // 1 Byte
        int  b;   // 4 Bytes(对齐到2 Byte边界)
    }; // 总大小=6 Bytes
    
  2. 2.扩展寄存器支持

    • SSE3指令集中的__m128类型:128位存储,直接支持并行计算

总结

现代微型计算机通过标准化格式(如补码、IEEE 754)实现了数据高效存储与跨平台兼容性,理解这些表示方法对软硬件协同优化至关重要。设计程序时需特别注意内存对齐与存储格式,以发挥物理硬件的最大性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao--xin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值