网站建设的线框图叫什么dw网页制作教程视频简单第三期
news/
2025/9/27 0:01:05/
文章来源:
网站建设的线框图叫什么,dw网页制作教程视频简单第三期,爱站网关键词排名,网站推广技术前言
小羊近期已经将C语言初阶学习内容与铁汁们分享完成#xff0c;接下来小羊会继续追更C语言进阶相关知识#xff0c;小伙伴们坐好板凳#xff0c;拿起笔开始上课啦~ 一、数据类型的介绍
我们目前已经学了基本的内置类型#xff1a;
char //字符数据类型
short …
前言
小羊近期已经将C语言初阶学习内容与铁汁们分享完成接下来小羊会继续追更C语言进阶相关知识小伙伴们坐好板凳拿起笔开始上课啦~ 一、数据类型的介绍
我们目前已经学了基本的内置类型
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数类型的基本归类
整形家族
char:unsigned charsigned char
short:unsigned short[int]signed short[int]
int:unsigned intsigned int
long:unsigned long[int]signed long[int]unsigned无符号数类型
当一个数是无符号类型时那么其最高位的1或0和其它位一样用来表示该数的大小。
signed有符号数类型
当一个数是有符号类型时最高数称为“符号位”。符号位为1时表示该数为负数为0时表示为正数。
注意有符号类型可以表示正数负数或0无符号类型仅能表示大于等于0的值
浮点型家族
float
double构造类型: //数组类型
struct //结构体类型
enum //枚举类型
union //联合类型指针类型:
int* p;
char* p;
float* p;
void* p;空类型:
void//(空类型)二、整型在内存中的存储
以整型int为例我们都知道常见的编译器中int占四个字节那么计算机中这四个字节是如何将数据存储下来的呢 那我们先了解一下机器数和真值的概念再去了解原码反码补码的概念
2.1 机器数
一个数在计算机中的二进制表示形式叫做这个数的机器数。机器数是带符号的在计算机中 用机器数的最高位存放符号正数为0负数为1。
例如 3的机器数0000 0011
- 3的机器数1000 00112.2 真值
因为第一位是符号位所以机器数的形式值就不等于真正的数值。所以为区别起见将带符号位的机器数对应的真正数值称为机器数的真值。
例如
0000 0001的真值 000 0001 1
1000 0001的真值 -000 0001 -12.3 原码、反码、补码
对于一个数计算机要使用一定的编码方式进行存储原码、反码、补码是机器存储一个具体数字的编码方式。
三种方式均有符号位和数值位两部分符号位都是0表示“正数”1表示“负数”而数值位分正负数而定。
正数的原码、反码、补码都相同负数的原码、反码、补码各不相同 原码: 直接将数值按照正负数的形式翻译成二进制就可以得到原码 反码: 将原码的符号位不变其他位次按位取反 补码: 反码符号位不变数值为1 反码回到原码的两种方式 1、补码-1后 取反得到原码 2、补码取反后 1得到原码 对于整形来说数据存放内存中其实存放的是补码那这又是为什么呢 在计算机系统中数值一律用补码来表示和存储。原因在于使用补码可以将符号位和数 值域统一处理同时加法和减法也可以统一处理CPU只有加法器 此外补码与原码相 互转换其运算过程是相同的不需要额外的硬件电路。 我们看看在内存中的存储 我们知道内存中a和b存储的是补码但我们发现存储的顺序有点不对劲。 -10在内存中存储应该是FFFFFFF6而我们看到的是F6FFFFFF。 这里小羊呢就为铁汁们了解一下大小端
2.4 大小端介绍
什么是大小端 大端存储模式指数据的低位保存在内存的高地址中而数据的高位保存在内存的低地址中 小端存储模式指数据的低位保存在内存的低地址中而数据的高位保存在内存的高地址中 例如
数字0x12 34 56 78在内存中
大端模式我们通常直观上认为的模式 低地址 -------------------- 高地址0x12 | 0x34 | 0x56 | 0x78小端模式 低地址 -------------------- 高地址0x78 | 0x56 | 0x34 | 0x12** 为什么会有大端和小端呢** 因为在计算机系统中我们是以字节为单位的每个地址单元都对应着一个字节一个字节为8bit。但是在C语言中除了8 bit的char之外还有16 bit的short型32 bit的long型要看具体的编译器另外对于位数大于8位的处理器例如16位或者32位的处理器由于寄存器宽度大于一个字节那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
如何判断大小端的代码
#includestdio.h
int main()
{int i 1;//0000 0001char* p i;if (*p 1)//若第一个地址存的是1即为小端反则大端printf(小端);elseprintf(大端;return 0;
}自定义函数测试
#includestdio.hint check_sys()
{int a 1;char* p (char*)a;if (*p 1)return 1;elsereturn 0;
}int main()
{if (check_sys() 1)printf(小端);elseprintf(大端);return 0;
}三、浮点数在内存中的存储
#includestdio.h
int main()
{int n 9;float* p (float*)n;printf(n的值为%d\n, n);printf(*p的值为%f\n, *p);*p 9.0;printf(n的值为%d\n, n);printf(*p的值为%f\n, *p);return 0;
}我们先试着猜一下结果 输出显示 怎么样这个结果是不是有点出乎意料那么就跟着小羊来学习浮点数的存储规则吧。
3.1浮点数存储规则
浮点数存储形式
根据国际标准IEEE(电子和电子工程协会)754任意一个二进制浮点数V可以表示为下面的形式 (-1) ^ S * M * 2 ^ E 1. (-1) ^ S 表示符号位当S0时V为正数当S1时V为负数 2. M 表示有效数字且1 M 2 3. 2 ^ E表示指数位 例如
十进制的5.0写成二进制是0101 ------ 1.10x2^2 可以得出s0M1.01E2十进制的-7.0写成二进制是0111 -------1.11x2^2 可以得出s-1M1.11E2
IEEE 754 规定
对于 32 位的浮点数单精度最高的 1 位是符号位 s 接着的 8 位是指数 E 剩下的 23位为有效数字 M 。 对于 64 位的浮点数双精度最高的 1 位是符号位S接着的 11 位是指数 E 剩下的 52 位为有效数字 M 。 IEEE 754 对有效数字** M **和指数 E 还有一些特别规定。 前面说过 1≤M2 也就是说 M 可以写成 1.xxxxxx 的形式其中 xxxxxx 表示小数部分。 IEEE 754 规定在计算机内部保存 M 时默认这个数的第一位总是 1 因此可以被舍去只保存后面的xxxxxx部分。比如保存 1.01 的时候只保存01 等到读取的时候再把第一位的 1 加上去。这样做的目的是节省 1 位有效数字。以 32 位浮点数为例留给M 只有 23 位将第一位的1 舍去后等于可以保存 24 位有效数字。
至于指数 E 情况就比较复杂。首先 E 为一个无符号整数 unsigned int 这意味着如果 E 为 8 位它的取值范围为 0~255 如果 E 为 11 位它的取值范围为 0~2047 。但是我们知道科学计数法中的E 是可以出现负数的所以IEEE 754 规定存入内存时 E 的真实值必须再加上一个中间数对于 8 位的 E 这个中间数是127 对于 11 位的 E 这个中间数是1023 。比如 2^10的 E 是 10 所以保存成 32 位浮点数时必须保存成 10127137 即10001001。
3.2 浮点型的读取
我们知道浮点型在内存中的存储后将步骤反过来就是取出的过程。 1、有效数字M
IEEE 754规定在计算机内部保存M时默认这个数的第一位总是1因此可以被舍去只保存小数部分。比如保存1.0110001101时只保存0110001101后面的位数补0就可以了等到读取的时候再把第一位的1补上去。
2、指数E
E为一个无符号整数unsigned int根据指数域不同取值分为一下三种情况
1E不全为0或不全为1规格化值
这是最常见情况取出内存中的数时指数E的计算值减去127或1023得到真实值再将有效数字M前加上第一位的1。
2E全为0非规格化值
这时浮点数的指数E等于1-127或1-1023即为真实值有效数字M不再加上第一位的1而是还原为0.xxxxxxx的小数。这样做是为了表示正负零以及接近于0的很小的数字。
3E全为1特殊数值
当指数域全为1时属于这种情形。此时如果小数域全为0且符号域S0则表示正无穷如果小数域全为0且符号域S1则表示负无穷。如果小数域不全为0时浮点数将被解释为NaN 即不是一个数(Not a Number)
解释前面的题目
整形9以浮点型打印
整形存储浮点型打印
0000 0000 0000 0000 0000 0000 0000 1001
浮点型读取
s0M000 0000 0000 0000 0000 0110E0000 0000(E全为0)
所以结果为0.0000(近于0的很小的数字)现在看例题的第二部
浮点数9.0以整形打印
9.0 - 1001.0 - (-1)^0*1.001*2^3 - s0,M1.001,E3127130
所以第一位的符号位s0有效数字M为001后面在加20个0凑满23位指数E为3127130即10000010
所以写成SEM
0 10000010 001 0000 0000 0000 0000 0000
这32位的二进制数还原成十进制正是1091567616总结
希望看完这篇文章对铁汁们有所帮助小羊后续还会持续更新C语言的学习知识希望小伙伴们给个支持来个一键三连~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918922.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!