<c语言学习> 整数和浮点数的存储方式

1.整数

有符号整数

第一位为符号位 1代表负数 0代表正数

  举例: signed char  

      8  --------------------->     0000 1000

      -8 ---------------------->     1111 1000 (补码形式存储)

 补码存储(计算)的妙处:

                举例:-8 + 8  = 0 ------>    1111 1000 + 0000 1000 = 1 0000 0000   (左边的1被挤出去)

signed short , signed int      同理

溢出情况举例:

        signed char A = 127   ----------------------- >    A = 01111111

        A+1 = -128   ----------------------->01111111 + 1 = 10000000      ( -128 = 10000000 )

同理:

        signed char A = -128 ------------------------> A = 10000000

        A-1 = 127 ----------------------->10000000 - 1 = 01111111     ( 127 = 01111111)

无符号整数

        没有符号位的说法 例如unsiged char 取值范围为 0~255

        举例: unsigned char  

                254 --------> 1111 1110

        溢出情况举例:

                与有符号类似: 

                unsigned char A = 254

                A+2 = 1 ----------------------> 1111 1110 + 0000 0010 = 1 0000 0001 (左边的1被挤掉)

2.浮点数 

浮点数存储:类似科学计数法    
 

        科学计数法:

                三个部分:正负号;

                                  有效数据(范围是1~10)

                                   位数  10 ^ n

        浮点数的三个部分(S, E, M):

                S 表示符号   E表示位数(理解为小数点的偏移量)  M表示有效数字:

                32位F(float):1S 8E 23M  : 第1位表示正负   接下来8位表示小数点位置  最后23位代表有效数字;
                64位D(double):1S 11E 52M   : 与32位同理 ,1位正负  11位表述小数点位置  最后52位代表数字;

                以float举例:

                S:


                S为1代表负数  为0代表正数    :可看做(-1)^S

                E:

                E是无符号整数:E取值范围:0~255  中间数为127   ,E的值减去127为实际偏移量,实际偏移量范围:-127~128

                例如:当E为128 实际偏移量为128-127 = 1,表示小数点向右移动一位

                (double类型 :E有11位二进制数, 可表示小数点偏移量为:-1023~1024)

                E的三种情况:
                E全1:表示无穷大
                E全0:有效数字M由1.xxxxxx 变为 0.xxxxx  此时该浮点数表示正负0(无限趋近0)

                E不全为0或不全为1则正常计算

                M:

                M表示有效数字,表示的数字范围为:1<=M<=2

                M的含义:

                        当M 为 1111 1111 0000 0000 0000 000 时,实际含义为1.1111 1111(二进制) ,其中小数点左边的1被省略 读取时自动加上

                        至于为什么省略,是因为小数点左边那个数字永远是1,所以可以省。

                举例:

                - 0. 125   以float形式存储

                        S为1  (-0.125 为负数)

                        S的二进制表示为1

                        M为 0(表示有效数字为1.0000 0000 0000 0000 0000 000)

                        M的二进制表示为0000 0000 0000 0000 0000 000

                        E为 124 (表示小数点偏移为-3 ) E 减去127表示实际偏移量

                        E的二进制表示为 0111 1100

                       综上, -0.125实际存储为:

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值