C语言-计算机中数据的存储

在计算机中,所有的信息都是以二进制形式表示的,包括数据的存储与计算。

1、整型数据的存储
C语言中,不同的编译器与平台整型数据占有的字节数是不同的,16位的是2个字节,32位的是4个字节,1个字节是8位。这里假设整型数据占2个字节。
对于有符号数最高位是符号位,0代表正数,1代表负数。对于无符号数,全部都是正数或者0。计算机中数值都是以补码形式表示的,这样有符号数与无符号数的运算就会统一起来,进行运算时是不会区分有符号和无符号数,最后以相应的类型解释,就得到相应的结果。
下面以16位的有符号数为例,解释计算机中对数据的存储。
16位的有符号数能表示的数的范围是-32768 ~ 32767,无符号数的范围是0 ~ 65535。
正数的原码、反码和补码是相同的,即符号位为0,其余各位表示数值。(下面虽说表格分成两段,实际上它们在内存中是连续的,这样画是为了便于观察)
1的补码:
在这里插入图片描述127( 2 7 − 1 2^7-1 271)的补码:
在这里插入图片描述32767( 2 15 − 1 2^{15}-1 2151,即两字节所能表示的最大正数)的补码:
在这里插入图片描述
负数的原码、反码和补码不同:
(1)原码:符号位为1,其余各位表示数值的绝对值。
(2)反码:符号位是1,其余各位对原码取反。
(3)补码:反码加1
Tips:若对补码再取补码,则可以得到原码。
例如:
-1的原码:
在这里插入图片描述-1的反码:
在这里插入图片描述-1的补码:
在这里插入图片描述-32767的补码:
在这里插入图片描述-32678的补码(2字节所能表示的最小负数):
在这里插入图片描述
计算机中表示0的数就是全0,没有-0这一表示。
根据数据的类型可以对相同的存储的数据进行不同的解释,如果-1解释为无符号数,那么就是65535(0xFFFF),而-32767解释为无符号数就是32769(0x8001),-32768解释为无符号数是32768(0x8000)。

2、浮点型数据的存储
计算机中对实型的数据存储和整型是不一样的,它分为符号位、阶码和尾数三部分。实型数据包括单精度浮点型和双精度浮点型数据,它们固定占用的字节数分别是4字节(32位)和8字节(64位)。例如:实数-1.2345e+02是负数,阶码为2,尾数是1.2345。浮点型数据的存储比较复杂,暂时不做详细阐述。
在这里插入图片描述需要注意的是,浮点数的精度是浮动的,一般不能用于精确比较!

3、字符型数据的存储
每个字符在内存中占用1个字节(8位),存储它对应的ASCII。例如字符型常量’A’的ASCII码为65,内存中存储的就是65的补码,如下:
在这里插入图片描述

参考 C语言程序设计(第4版)/何钦铭,颜晖 例题及课后习题
参考程序https://gitee.com/sgxgitee/mooc-c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值