整数和浮点数的存储

本文详细介绍了计算机中整数(有符号和无符号)以及浮点数(基于IEEE754标准)的存储机制,包括存储过程和示例,如char类型整数溢出和浮点数的二进制表示方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、整数的存储

        1、有符号整形的存储

        2、无符号整形的存储

二、浮点数的存储

        1、浮点数的存储格式

        2、浮点数的存储过程


一、整数的存储

        1、有符号整形的存储

        在平常的算术中,我们知道1+1=2,那么在计算机中又是怎么计算出1+1=2的呢?在计算机中的计算,首先要将数都变为补码进行运算,运算完之后再转化为原码,而在c语言中,int类型的存储大小为2^-32~2^32,char类型是-127~128,今天我们以char类型为例:

#include<stdio.h>
int main(){
    char a=1,
    char b=128,
    char c=257;
    printf("a=%d,b=%d,c=%d",a,b,c);
    return 0;
}

   我们打印出来的结构是

,为什么呢?以图为例:

        我们根据图可以知道当当补码01111111+1之后变成了10000000 ,而在有符号char类型中,后7位为数值为,第一位为符号位,而10000000变为原码之后就变成了-128,而,对于char c=257;因为已经超出了范围,当c=255时,c的补码为11111111,而当c=256时,变为100000000,但char类型只能保存8个比特位,所以1就溢出,256就变成了00000000,257则变成了00000001,所以c=1;

    2、无符号整形的存储

        而对于无符号整形的存储方式其实和有符号整形的图是一样的,不同的是,无符号整形没有符号位,只有数值位,所以无符号整形没有负数,为了更好的说明,我们还是以unsigned char作为一个参照:(以图为例)

        在无符号的char类型中,取值范围是0~255,而当大于255的时候,又是从0开始,由于是整数的原因,补码和原码的取值是一样的,所以127+1还是变成128.

二、浮点数的存储

        1、浮点数的存储格式

        根据国际标准IEEE(电器和电子工程协会)754,任意一共二进制浮点数V可以表示下面的形式:

        V=(-1)^S*M*2^E;

        (-1)^S表示符号位,当S=0,V为正数,当S=1,v为负数

        M代表要有效数字,M是大于等于1,小于2的

        2^E表示指数位。

        浮点数的存储,其实存储的就是S,M,E相关的值

        2、浮点数的存储过程

        我们已经知道浮点数的存储格式,那么我们是如何存储浮点数的呢?以5.5的存储为例:

        5.5写成二进制就是101.1=1.01*2^2,我们知道V=(-1)^0*1.011*2^2;S=0,M=1.011,E=2,但是存储在SEM的格式中E需要加上128,所以5.5以SEM的存储方式变成0 10000010 01100000 00000000 0000000

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值