当前位置: 首页 > article >正文

整形的存储形式和浮点型在计算机中的存储形式

在计算机科学的底层世界里,数据存储是基石般的存在。不同数据类型,如整形与浮点型,其存储方式犹如独特的密码,隐藏着计算机高效运行的秘密。理解它们,是深入掌握编程与计算机原理的关键。

 

一、整形的存储形式

 

原码、反码和补码

 

计算机存储整形数据,通常以二进制补码形式。在此之前,先了解原码和反码。

 

原码是数值的直观二进制表示,最高位为符号位,0代表正数,1代表负数。以8位二进制表示整数为例,+5的原码是00000101,-5的原码是10000101 。

 

反码计算规则:正数反码与原码相同,负数反码是原码除符号位外各位取反。所以,-5的反码是11111010。

 

补码则是在反码基础上,正数补码同原码,负数补码是反码最低位加1。因此,-5的补码为11111011。

 

使用补码存储的原因

 

补码存储优势显著。其一,简化运算规则,将减法转换为加法。比如计算5 - 3,可变为5 + (-3),利用补码做加法,统一了加减法运算,降低硬件实现复杂度。其二,解决0的表示唯一性问题。原码和反码中,0有+0和-0两种表示,补码中0仅有一种表示00000000,让运算更便捷、统一。

 

不同类型的整形存储

 

常见整形类型有short、int、long等,占用字节数不同。32位系统中,short一般占2字节(16位),int占4字节(32位),long占4字节(64位系统中,long可能占8字节 )。不同位数决定了它们表示数值范围不同。如16位short类型,范围是-32768到32767,最高位为符号位,剩下15位表示数值,最小值是1000000000000000(即-32768),最大值是0111111111111111(即32767)。

 

代码示例

#include <stdio.h>

 

int main() {

    short num1 = -5;

    int num2 = 10;

    long num3 = 100000L;

 

    // 输出数据的值

    printf("short类型的num1值为: %d\n", num1);

    printf("int类型的num2值为: %d\n", num2);

    printf("long类型的num3值为: %ld\n", num3);

 

    return 0;

}

这段C语言代码展示了不同整形类型的使用。通过 printf 函数输出它们的值,让我们直观看到整形数据的存储和使用方式。运行代码,会在控制台输出各变量的值。

 

[此处插入运行上述代码的控制台截图,展示代码运行结果]

 

二、浮点型的存储形式

 

IEEE 754标准

 

现代计算机存储浮点型数据多遵循IEEE 754标准。它将浮点型数据表示为符号位(S)、指数位(E)和尾数位(M)三部分。

 

单精度浮点型(float,占4字节,32位),符号位占1位,指数位占8位,尾数位占23位。

 

双精度浮点型(double,占8字节,64位),符号位占1位,指数位占11位,尾数位占52位。

 

存储格式的转换

 

把十进制浮点数转换为IEEE 754标准存储格式,步骤如下:先确定符号位,正数为0,负数为1;再将小数部分转二进制,如0.625二进制是0.101;接着规范化二进制数为1.xxxx \times 2^n形式,0.625规范化后是1.01 \times 2^{-1} ,指数n为-1;最后,指数部分加偏移量(单精度偏移量127,双精度偏移量1023)得存储用指数位。此例中,-1加127得126,即指数位为01111110 ,尾数位是规范化后小数部分去掉整数部分1,即01。所以,0.625单精度浮点型存储形式为0 01111110 01000000000000000000000。

 

浮点型存储的精度问题

 

因尾数位位数有限,浮点型存储存在精度问题。比如十进制0.1,二进制是无限循环小数0.0001100110011\cdots ,有限尾数位下只能近似存储,导致浮点数运算可能有精度误差。如一些编程语言中,0.1 + 0.2结果不精确等于0.3,而是接近0.3的近似值。

 

代码示例

python

a = 0.1

b = 0.2

print(a + b)

这段Python代码简单演示了浮点数运算的精度问题。运行代码,输出结果并非精确的0.3,而是近似值,体现浮点型存储的精度限制。

[此处插入运行上述Python代码的控制台截图,展示精度误差的结果]

 

三、总结

整形和浮点型在计算机存储形式上截然不同。整形以补码存储,用于精确存储整数,运算规则简单。浮点型遵循IEEE 754标准存储,适合表示实数,但存在精度问题。理解它们的存储形式,能帮我们在编程时合理选择数据类型,避免潜在问题,编写出更优质的程序。无论是大型软件开发,还是科学计算,这些基础知识都是坚实的后盾。

 


http://www.kler.cn/a/530936.html

相关文章:

  • 【产品经理学习案例——AI翻译棒出海业务】
  • Python写一个爱心
  • 数据结构之栈和队列(超详解)
  • Java:日期时间范围的处理
  • 大厂面试题备份20250201
  • Vue3 表单:全面解析与最佳实践
  • 【Redis】安装配置Redis超详细教程 / Linux版
  • 集合通讯概览
  • 基于JMX实现消息队列监控
  • 动手学深度学习-3.2 线性回归的从0开始
  • 【数据结构-Trie树】力扣648. 单词替换
  • Kafka流式计算架构
  • Linux——进程间通信之SystemV共享内存
  • (回溯递归dfs 电话号码的字母组合 remake)leetcode 17
  • OpenCV4.8 开发实战系列专栏之 30 - OpenCV中的自定义滤波器
  • html中的列表元素
  • 全域旅游景区导览系统小程序独立部署
  • 使用冒泡排序模拟实现qsort函数
  • NeetCode刷题第20天(2025.2.1)
  • STM32 DMA+AD多通道
  • 音标-- 02-- 重音 音节 变音
  • 2024美团秋招硬件开发笔试真题及答案解析
  • Day33【AI思考】-分层递进式结构 对数学数系的 终极系统分类
  • C++:结构体和类
  • 刷题记录 动态规划-5: 62. 不同路径
  • python的pre-commit库的使用