第13节 数值型数据的存储

1.基本数据类型

自己电脑亲测!

类型关键字字节数位数取值
整型[singned] short216-32768~32767
[singned] int / long432-214783648~2147483647
[singned] long long832-9223372036854775808―9223372036854775807
unsingned short2160~65535
unsingned int / long4320~4294967295
unsingned long long8320―18446744073709551615
浮点型float432± (3.4×10-38~3.4×1038)
double / long double864± (1.7×10-308~1.7×10308 )
字符型[singned] char18-128~127
[unsingned] char180~256

2.对2要敏感

十进制数二进制十进制数与2关系十进制数与2关系
006426121-1
1112827322-1
21025628723-1
311512291524-1
410010242103125-1
510120482116326-1
6110409621212727-1
7111819221325528-1
810001638421432767215-1
16100003276821565535216-1
32100000655362164294967295232-1

3.整型数据存储方式

1.以按二进制形式存储;
2.以补码形式存放,最高位表示数值的符号(0为正,1为负);

0111111111111111

short型首位0,表示正数中的最大值 = 215-1 = 32767;

1111111111111111

short型首位1,表示负数中的最小值 = - 215 = - 32768;

1111111111111111

unsigned short型没有符号,全部二进制位表示数值本身:最大值 = - 216 - 1 = - 65535;

4.整型数据溢出初探

 #include <stdio.h>

int main()
{
	short a = 32767;
	printf("%hd\n", a + 1);
}
输出结果:
-32768

数据溢出规律:

① 数据最大值 < = > 数据最小值-1;

② 数据最大值+溢出值 < = > 数据最小值+(溢出值-1);

③ 数据类型的首尾形成一个闭环;

5.浮点数的存储原理

浮点数X表示为:X=M×rE

代号名称说明
M尾数数 X 的有效数字,其位数反映数据的精度
r基数,十进制的基数为10,二进制的基数为2
E阶码确定了数 X 的小数点的真实位置

在这里插入图片描述

类型字节数位数数符S阶码E尾数M取值取值
float4321位8位23位± (3.4×10-38~3.4×1038)精度7位
double8641位11位52位± (1.7×10-308~1.7×10308 )精度15位

计算float类型数据的取值范围:

①float型,有1位符号位,8位指数位,23位尾数位;

②指数表示范围为-128~127,指数最大为127;

③尾数最大为+1.11…(点后23个1,转10进制数为1.8388607);

④1.8388607×2127 ≈ 2×2127 = 3.4×1038,负数亦然.

浮点数精度问题

#include <stdio.h>
int main()
{
	double a, b, c;
	a = 1234567890.123456789;
	b = 987654321.987654321;
	c = a + b;
	printf("  %22.9lf\n", a);
	printf("+ %22.9lf\n", b);
	printf("------------------------\n");
	printf("= %22.9lf\n", c);
	return 0;
}
    输出结果:
    1234567890.123456717
+    987654321.987654328
------------------------
=   2222222212.111111164
#include <stdio.h>
int main()
{
	double a = 0.65f;
	double b = 0.6f;
	double c = a - b;
	if (c == 0.05)
		printf("对了!\n");
	else
		printf("错了!\n");
	printf("%10.8lf\n%10.8lf\n", a, b);
	return 0;
}
输出结果:
错了!
0.64999998
0.60000002
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值