关于数据类型的简单测试

主要测试了下浮点数据的非连续性、强制类型转换过程等。

#include<stdio.h>
int main()
{
	float a, b, c;
	a = 1.345f;
	b = 1.123f;
	printf("%f,%f\n",a,b);
	c = a + b;
	if (c == 2.468)
		printf("相等\n");
	else printf("不相等\nc=%.10f或%f\n",c,c);
	int i = 32768;//1000 0000 0000 0000
	printf("(char)32768=%d (short)32768=%d i=%d\n",(char)i,(short)i,i);
	
	return 0;
}


  1. 带小数点的字面量是double型而非float,float需要用f或者F来表明身份。如果使用float a = 1.345;则会警告:warning C4305: “=”: 从“double”到“float”截断。
  2. 浮点数表示的数据不是连续的,导致有些数据只能够用相近的能表示的数据表示,而不是该数据本身。
  3. f1==f2可能失败,应该使用fabs(f1-f2)<le-8(对于float来说保留了7位精度,将值控制在所在类型的精度范围之下就可以了)。
  4. 对于printf,任何小于int的类型会被转化成int,float会被转化成double;但是scanf不会,要输入short,需要%hd,要输入double,需要%lf。
  5. 强制类型转换只是从原来变量计算出了一个新的类型的值,它并不改变原来变量,无论是值还是类型都不改变。
  • 没有特殊需要,整数类型选择int。原因在于:int的大小和CPU中的寄存器位数大小相同,存取数据都是int大小存取。其次,使用short类型等需要考虑数据对齐问题。
  • 没有特殊需要,浮点类型选择double。现代CPU能够直接对double做硬件运算,性能不会比float差,在64位机器上,数据存储的速度也不比float慢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值