c语言读取内存数据

您所在的位置:网站首页 c语言读取内存地址 c语言读取内存数据

c语言读取内存数据

#c语言读取内存数据| 来源: 网络整理| 查看: 265

要想了解数据在内存中的存储的话,首先应该了解数据的类型。 下面介绍C语言中数据类型: 1.C语言中的基本内置类型:

char //字符数据类型 大小为1个字节 short //短整型 大小为2个字节 int //整形 大小为4个字节 long //长整型 大小为4或者8个字节 long long //更长的整形 大小为8个字节 float //单精度浮点数 大小为4个字节 double //双精度浮点数 大小为8个字节

2.数据的基本归类 (1)整形:

char //char是字符类型,在内存中存储的是ASCII值,ASCII值是整数。 //char c1在内存中存储的是取决于编译器的实现,有的编译器可能为unsigned char有的也可能为signed char unsigned char signed char short //short s1 的创建是有符号的 = signed short s2 //无符号必须写成unsigned short s3 unsigned short [int] //int 可以省略 signed short [int] int //int 同 short unsigned int signed int long //同int unsigned long [int] signed long [int] unsigned//为无符号的意思 signed//为有富豪的意思 //如果是有符号的,那么二进制序列的最高位为符号位,0表示正数,1表示负数。 //如果是无符号的,最高位位数据位。

(2)浮点型:

float double //c99中有 long double

(3)构造类型

数组类型 int arr[10]; 其中的数据类型为int [10] 结构体类型 struct 枚举类型 enum 联合类型 union

(4)指针类型

int *pi; char *pc; float* pf; void* pv; //指针变量用来存放地址的

(5)空类型即void类型

通常应用于函数的返回类型、函数的参数、指针类型。 整形在内存中的存储

了解完了数据的类型,下面一起学习数据在内存中的存储。 我们在创建变量时,要在内存中开辟空间。开辟空间的大小是根据数据的类型来决定的。 基本类型的开辟占据的空间大小:

char //字符数据类型 大小为1个字节 short //短整型 大小为2个字节 int //整形 大小为4个字节 long //长整型 大小为4或者8个字节 long long //更长的整形 大小为8个字节 float //单精度浮点数 大小为4个字节 double //双精度浮点数 大小为8个字节

整形数据的存储要依靠三码,何为三码? 三码就是原码、反码、补码 拿一个简单的数字来举例:

//整数3的原码是: 00000000000000000000000000000011//将三翻译为二进制序列 //反码是: 00000000000000000000000000000011 //补码是 00000000000000000000000000000011 //正数的三码都是相同的 //-10的原码是: 10000000000000000000000000001010 //求反码原码时符号位不变 //反码为: 11111111111111111111111111110101 //补码为: 11111111111111111111111111110110 //16进制为每四位加在一起即为16进制的一位 //-10的16进制为: fffffff6 1-1的计算 //使用原码计算 00000000000000000000000000000001 10000000000000000000000000000001 10000000000000000000000000000010 //此结果为-2 //使用原码计算是错误的 //使用补码计算 00000000000000000000000000000001//1的补码 11111111111111111111111111111111//-1的补码 10000000000000000000000000000000

故整数在内存中是以补码的形式来存储的

signed char //取值范围 //最高位为符号位那么取值范围为-128~127 //10000000会被直接解析为-128 unsigned char//取值范围 //最高位为时数据位取值范围为:0~255 #include int main() { unsigned int ch = -10; //-10 //10000000000000000000000000001010 //11111111111111111111111111110101 //11111111111111111111111111110110 printf("%u\n", ch);//%u是打印无符号数,意思是打印的一定是无符号数,不是无符号数,也认为是无符号数 printf("%d\n", ch);//%d 是打印有符号数,意思是打印的一定是有符号数,不是有符号的数,也认为是有符号数 return 0; }

这就是整形数据在内存中的存储。

浮点数在内存中的存储

整数和浮点数在内存存储中有所差异。

该结论由以下代码可得:

int main() { int n = 10; float *pFloat = (float *)&n; printf("n的值为:%d\n",n); printf("*pFloat的值为:%f\n",*pFloat); *pFloat = 10.0; printf("num的值为:%d\n",n); printf("*pFloat的值为:%f\n",*pFloat); return 0; }

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

(-1)^S * M * 2^E (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位。

5.5的二进制序列表示方法: 5的二进制表示为101 0.5的二进制表示为0.1 所以5.5的二进制表示为: 101.1=(-1) ^ 01.0112 ^ 2 而0.75的二进制表示为:0.11

练习: 请写出9.0的二进制序列的表示方法。

IEEE 754规定: 对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。 在这里插入图片描述

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。 在这里插入图片描述 IEEE 754对有效数字M和指数E,还有一些特别规定。 前面说过, 1≤M



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3