栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 27−1)的补码:
32767( 2 15 − 1 2^{15}-1 215−1,即两字节所能表示的最大正数)的补码:

负数的原码、反码和补码不同:
(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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号