毕业设计开发网站要怎么做,网站快速备案被退回的几种原因分析,建设网站应该注意的地方,wordpress 同步公众号目录
1、整数在内存中的存储
#xff08;1#xff09;大小端
#xff08;2#xff09;数据存储读取练习
2、浮点数在内存中的存储 Hello大家好#xff0c;很高兴我们又见面啦#xff01;给生活添点Passion,开始今天的编程之路#xff01;
1、整数在内存中的存储 之…
目录
1、整数在内存中的存储
1大小端
2数据存储读取练习
2、浮点数在内存中的存储 Hello大家好很高兴我们又见面啦给生活添点Passion,开始今天的编程之路
1、整数在内存中的存储 之前我们讲过二进制数的原码、反码和补码。对于整型来说数据存放内存中其实存放的是二进制补码。 1大小端 首先我们来介绍一下什么是大小端 在内存中存储这两个字节有两种方法一种是将低序字节存储在起始地址这称为小端(little-endian)字节序另一种方法是将高序字节存储在起始地址这称为大端(big-endian)字节序。
什么意思呢我们现在定义一个变量看看她是如何储存在内存中的 我们可以看到从左往右依次是44 33 22 11这和我们定义的11 22 33 44恰好相反数据的高字节内容保存在高地址处说明在这里我们vs2022是小端存储模式。 那么在读取这个数据的时候就应该由高地址到低地址这样读取。
现在设计一个程序来判断当前机器的字节序大端还是小端
#include stdio.h
int check()
{int i 1;return (*(char*)i);
}
int main()
{int ret check();if (ret 1){printf(小端\n);}elseprintf(大端\n);return 0;
}
现在我们来分析一下这个程序是怎么运行的。 我们取出了i的内存在函数中我们取出了他的地址并强制转化成了char型解引用。我们都知道int型数据占四个字节char型占一个字节那我们强制转化之后读取只读取了一个字节也就是01先读低地址。倘若我们读出来是00不就说明他是00 00 00 01这样的大端储存模式吗
输出结果 2数据存储读取练习
下面我们来看这道题
#include stdio.h
int main()
{char a -1;signed char b -1;unsigned char c -1;//无符号字符型printf(%d %d %d, a, b, c);return 0;
}a,b的输出结果没有什么异议就是正常的读取但是第三个就离谱起来了结果居然是255
别害怕我们一点点来分析。 首先我们把-1的补码存入内存中
11111111 11111111 11111111 11111111
char取一个字节11111111 因为是无符号整型高位全都补000000000 00000000 00000000 11111111 正数的原码反码补码都相同直接转十进制打印结果为255。 再看下面这道题
#include stdio.h
int main()
{char a -128;printf(%u,a);return 0;
}
运行结果 结果很抽象但是不要害怕我们一点点来分析 首先还是把-128补码存入内存中
11111111 11111111 11111111 10000000 然后%u是打印无符号整型的意思打印的时候要先强制转化为无符号整型然后取一个字节
10000000 接着用符号位补全
11111111 11111111 11111111 10000000 现在系统认为这个数是无符号整数那么他的原码反码补码都是相同的所以直接换成十进制打印 这里我们用计算器算出结果。 总结一下容易出错或不容易弄懂的点 1、如果一个数是无符号整型那么补全的时候应该用0补全如果不是无符号整型则应该用符号位补全。 2、因为我们是以%d的形式打印所以我们去一个字节后应该补全补成四个字节。 2、浮点数在内存中的存储 不知道大家在写代码的时候有没有遇到这种问题在强制转化整型或者不知道怎么着浮点数以%f的输出结果为0.000000这就很莫名其妙。 其实原因就在于在代码编写的时候有意或无意的将整型转化为了浮点型由于浮点型与整型的读取规则不同导致出错。
这里我们简单了解一下浮点数是如何进行储存的。 根据国际标准IEEE电气和电子工程协会 754任意一个二进制浮点数V可以表示成下面的形式 (-1)^s表示符号位当s0V为正数当s1V为负数。 M表示有效数字大于等于1小于2。 2^E表示指数位。
放在内存中这里以32位为例 最高的1位存储符号位S接着的8位存储指数E剩下的23位存储有效数字M 在六十四位中E存储位数为11位剩下的52位存储M。 既然存储和读取规则不同相信大家很容易就明白为什么强制转化之后结果会不正确了 今天的内容就分享到这感兴趣的朋友可以点点关注三连支持一下我会持续更新C/C/算法知识分享期待我们的下次见面