提示:个人学习记录,如有错误,欢迎指正
文章目录
- 前言
- 一、十进制小数于二进制小数之间如何相互转化?
- 二、计算机内存中是如何储存
- 在C语言中应用一下
前言
提示:本次主要复习C语言指针时,学习到的相关知识的记录,并第一次尝试以博客的形式记录自己的学习。
一、十进制小数与二进制小数如何相互转化?
十进制===>>二进制
比如 : 有十进制小数:12.345
转化为二进制分成两个部分:
1.整数部分转化
- 对应十进制 12
- 对应二进制 1100
2.小数部分转化
- 对应十进制 0.345
- 需要先乘2 = 0.690 小数点左边为 0
- 还继续乘2 = 1.380 小数点左边为 1
- 还继续乘2 = 0.760 小数点左边为 0
- 还继续乘2 = 1.520 小数点左边为 1
- 还继续乘2 = 1.040 小数点左边为 1
- 还继续乘2 = 0.080 小数点左边为 0
- 还继续乘2 = 0.160 小数点左边为 0
- 还继续乘2 = 0.320 小数点左边为 0
- 还继续乘2 = 0.640 小数点左边为 0
- 还继续乘2 = 1.280 小数点左边为 1
- .........
(以此类推,自上而下取出以上小数点左边的数即可,当乘2后小数部分为0时运算完成,当然有可能会出现不会为0的情况这时就会取一定的精度,所以浮点数类型的数据不是精确值)
- 对应的十进制 0.345
- 对应的二进制 0.0101 1000 0101 0001 1111(这里取了20位)
合并起来就是:1100.0101 1000 0101 0001 1111
对比十进制是:12.345
二进制===>>十进制
整数部分就不再赘述
小数部分:.0101 1000 0101 0001 1111
0*2^(-1) + 1*2^(-2) + 0*2^(-3) + 1*2^(-4) + 1*2^(-5) +.......... = 0.345
最后再组合起来就是12.345
二、计算机内存中如何存储
对于浮点数 有float和double
float类型 C语言中占 4个字节 32位
存储时 1位 符号位(0表示整数,1表示负数)
2-9位 指数位(占8位)
10-32位 尾数(占23位)
共32位
以12.345为例:计算机中的存储为 0100 0001 0100 0101 1000 0101 0001 1111
0 符号位:就表示正数
100 0001 0 指数位:127+n 的二进制形式
下面解释n是什么
12.345的二进制:1100.0101 1000 0101 0001 1111
用科学计数法: 1.10001011000010100011111 * 10^3 其中3就是n
100 0101 1000 0101 0001 1111 尾数:科学计数法小数点后边的数
科学计数法的1.10001011000010100011111 * 10^3 整数位都为1所以尾数只取小数点后边的
double类型 C语言中占 8个字节 64位
存储时 1位 符号位(0表示整数,1表示负数)
2-12位 指数位(占11位)
13-64位 尾数(占52位)
共64位
相比于float只是指数位变成了 1023+n 的二进制形式,类比即可
在C语言中应用一下
#includeunsigned char AirData[20]; void SendData(const unsigned char *date,unsigned char count) //传一个指针并将其中的值传到AirData[20] { unsigned char i; for(i=0;i



