09:C语言进阶篇一

数据类型

基本数据类型:char,short,int,long,float,double
复合数据类型:数组,结构体,共用体,类(C语言没有类型,C++有)

1.1、内存占用与sizeof运算符

变量存储在内存中,需要占用一定的内存空间。计算机存储数据都是以补码的形式来进行存储的。一个变量占用多少空间是由变量的数据类型决定的。每种数据类型,在不同的机器平台上占用内存是不同的。我们一般讲的时候都是以32位CPU为默认硬件平台来描述:

char 		1字节		8位
short 		2字节		16位
int 		4字节		32位
long 		4字节		32位
float 		4字节		
double		8字节

1.2、有符号数和无符号数

1、对于char short int long等整形类型的数,都分有符号有无符号数。
2、而对于float和double这种浮点型数来说,只有有符号数,没有无符号数。
3、对于有符号数和无符号数来说,存储方式不同的。譬如对于char来说unsigned char无符号数,8位(1字节)全部用来存数的内容 ,而无符号数的补码就是原码。所以表示的数的范围是0(补码:为0000 0000) ~ 255(补码为:1111 1111)
4、signed char表示有符号数,8位中最高位用来存符号(0表示正数,1表示负数),剩余的7位用来存数据。所以可以表示的数的范围是 -128~127(补码为:0111 1111)。==对于正数,补码和原码相同。-128(补码是1 1000 0000)。但是是8位,所以最前面的那个1溢出了,直接丢弃。

1.3、整形数和浮点型数存储方式

对于float和double这种浮点类型的数,它在内存中的存储方式和整形数不一样。所以float和int相比,虽然都是4字节,但是在内存中存储的方式完全不同。所以同一个4字节的内存,如果存储时是按照int存放的,取的时候一定要按照int型方式去取。如果存的时候和取的时候理解的方式不同,那数据就完全错了。

#include <stdio.h>

int main(void)
{
	int a = 123;
	printf("%f\n",a);//将int类型以float形式取出来进行输出。
	return 0;
}

0.000000

总结:存取方式上主要有两种,一种是整形一种是浮点型,这两种存取方式完全不同,没有任何关联,所以是绝对不能随意改变一个变量的存取方式。在整形和浮点型之内,譬如说4种整形char、short、int、long只是范围大小不同而已,存储方式是一模一样的。float和double存储原理是相同的,方式上有差异,导致了能表示的浮点型的范围和精度不同。

#include <stdio.h>

int main(void)
{
	int a = 123;
	float b = a;	//将a里面的数取出来以float形式存储
	printf("%f\n",b);
	return 0;
}

123.000000

1.4、数据类型转换

不同类型的数据进行运算时,需要转化为同一类型,才进行运算。

1.4.1、隐式转换

代码①:

#include <stdio.h>

int main(void)
{
	int a = 3;
	float b = 3.5;
	printf("a+b = %f\n",a+b);
	printf("a+b = %d\n",a+b);//a+b是flaot类型,不能以整型取出(什么方式存储,什么方式取出)
	printf("a = %f\n",a);//什么方式存储,什么方式取出
	printf("a = %d\n",a);
	return 0;
}

a+b = 6.500000
a+b = 0
a = 0.000000
a = 3

  • 由输出可知:int类型和float类型进行运算时,运算的过程中int类型a会自动转换为float类型的临时变量f1,然后l临时变量f1在和float类型b进行运算。生成一个临时变量float类型f2,最后由%f取出进行输出
  • 由printf(“a = %f\n”,a);可以得出,int类型a转换为临时float类型f1。其实是将a变量里面的值取出来,放在一个float类型的变量中,而a中的变量还是int类型。

代码②:

#include <stdio.h>

int main(void)
{
	int a = 3;
	float b = 3.5;
	int c;
	c = a+b;
	printf("c =  %d\n",c);
	return 0;
}

c = 6

  • 由输出可知:int类型a先转换为float临时变量f1,然后在和float变量b进行运算,生成一个临时变量f2。将这个临时变量f2的值取出来赋给int类型的变量c,最后由%d取出进行输出

1.4.2、强制转换

#include <stdio.h>

int main(void)
{
	int a = 3;
	float b = 3.5;
	printf("a+b=%d\n",(int)(a+b));
	return 0;
}

a+b=6

  • a+b运算生成的本来是float类型的临时变量f2,然后通过强制类型转换为int类型,最后由%d取出进行输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值