在什么网站做调查问卷,营销网站建设新闻,网站建设感受,wordpress生成静态html页面写在开头
关于复习的相关内容其实从一开始就列出了大纲#xff0c;但是迟迟没有开始复习#xff0c;一方面是因为学校学业却是繁忙#xff0c;另一方面还是内心对旧知识掌握不熟练需要再学一遍的畏惧和懒惰#xff0c;但如今#xff0c;复习必须开始了。今天我从C语言的最…写在开头
关于复习的相关内容其实从一开始就列出了大纲但是迟迟没有开始复习一方面是因为学校学业却是繁忙另一方面还是内心对旧知识掌握不熟练需要再学一遍的畏惧和懒惰但如今复习必须开始了。今天我从C语言的最开始数据存储开始讲起慢慢回忆起尘封的往事---C语言。
C语言数据储存
数据类型的基本介绍
在C语言中最基本的内置类型是必须要求掌握的。这也非常普遍的应用于我们的代码编写中。他们分别是 属于整型 char (unsigned char signed char) short (unsigned short signed short) int (unsigned int signed int) long (unsigned long signed long) long long 属于浮点数 float double long double 属于构造类型 数组类型 结构体类型 struct 枚举类型 enum 联合类型 union 指针类型 空类型 (void) 通常用在函数的返回类型函数参数指针类型等。
整型在内存中的存储
在语言的层面创建一个变量是在内存中开辟出空间而开辟多少空间的依据是变量本身的类型。比如int 类型的变量在被分配空间时会被分配4个字节也就是32bit 位的空间。那么数据到底在所开辟出来的内存中是如何存储的呢
原码、反码、补码
计算机中总共有三种对整数的二进制表示方法分别是原码、反码、补码。
三种表示方法中都有符号位和数值位两部分组成。符号位0为正1为负。而数值位略微复杂需要分为正数和负数两种情况正数的原反补都相同负数的三种表示方法均不同。下面介绍一下原码、反码和补码
原码直接将数值按照正负数的形式翻译成二进制就可以得到原码。
反码原码的符号位不变其他位依次按位取反得到反码。
补码反码1得到补码。
对于整型数据内存中存放的是补码。
因为在计算机系统中数值一律用补码来表示和存储。原因在于使用补码可以将符号位和数值域统一处理同时加法和减法也可以统一处理 在CPU中只有加法器利用补码可以做到加减统一处理此外补码和原码的相互转化运算过程相同不需要额外的硬件电路。
那我们可以尝试着算一下20 和 -10 在内存中的存储。
但是如果我们在VScode中输入 int main(){int a 20;int b -10;return 0;}
并且监视内存可以发现a、b变量在内存中的显示分别为 a : 0x14 00 00 00b : 0xf6 ff ff ff
它们在内存中显示的是0x前缀代表是16进制但是却与我们转化的恰好相反这是因为大小端存储模式。
大小端模式
大端存储模式数据的低位保存在内存的高地址中数据的高位保存在内存的低地址中。
小端存储模式数据的低位保存在内存的低地址中数据的高位保存在内存的高地址中。
记忆方法小-低-低剩下相反。
为什么存在大小端模式之分计算机系统以字节作为内存的单位每个地址对应一个字节。对于位数大于8位 (bit) 的处理器由于寄存器的宽度大于1字节那么必然存在着多字节间排列的问题因此导致了大端存储和小端存储。
常用机器一般采取小端模式。 //判断当前机器字节序列int check_sys(){int i 1;return (*(char*)i);}int main(){int ret cheack_sys();if(ret 1){printf(小端);}else{printf(大端);}return 0;}
浮点数的存储
浮点数的表示范围在 float.h 中定义。
根据国际标准IEEE754任何一个二进制浮点数V可以表示成下面的形式 (-1)^S * M * 2^E// (-1)^S 表示符号位。当S0V为正数S1V为负数// M代表有效数字大于等于1小于2。//所以M只可能写成1.xxxxxxx的形式计算机会默认略去小数点前面的1只会保存小数位这样可以节省1为有效数字。// 2^E 表示指数位。E位一个无符号整数。但是科学计数法中指数位是可以出现负值的。所以IEEE754规定存入内存时E的真实值必须加上中间数32位浮点数中间数位12764位浮点数中间数为1023.// 比如E 10保存成32位浮点数时保存为10127 137// 就是带符号位的二进制的科学计数法
IEEE 754规定
32位的浮点数最高位的1位是符号位S紧接着的8位是指数E剩下的23位为有效数字M。
64位的浮点数最高位的1位是符号位S紧接着11位是指数E剩下的52位为有效数字M。 指数E可以细分为三种情况。 二进制E不全为0或者不全为1 浮点数采用下面规则表示E的计算值减去中间数127 或者 1023得到真实值。M加上第一位的1得到真实的有效数字。 举例 二进制E全为0 极限接近0的小数 浮点数的指数位E就等于 1 - 中间值即为真实值。 M不再加上1而是还原为0.xxxxxx的小数用于表示极限接近于0的很小的数字。 二进制E全为1 正负∞ 正负取决于符号位
数据存储小节完。