C语言 数据类型

这篇博客介绍了C语言中的数据类型,包括基本类型、构造类、指针类型和void类型,并详细阐述了变量的概念、整数的存储方式以及整数之间赋值的规则。同时,也提及了常量的使用和分类。

1.C语言中的数据类型
1).基本类型(整形数、浮点数)
2).构造类(数组、结构体、联合体、枚举)
3).指针类型
4).void类型。
typeof(X)表示X的数据类型,整数默认int类型,浮点数默认double类型
数组类型大多可以相互转换。不同类型相加减向高精度的转换。

	1.基本类型(整形数、浮点数)
			1)整数类型:intshortlongdoublefloatchar
				1个字节=1byte = 8bit
				char/unsigned char1个字节 (字符型) 		-保存字符对应的ASCII值
				short/unsigned short2个字节			(存储形式在后面)
				int/unsigned int4个字节
				long/unsigned long4个字节   long long8个字节(使用sizeof可以计算占字节数)
				signed(默认) 表示有符号  储存符号位为最高位。1为正数,0为负数
				unsigned 		表示无符号 所有字节都为 数值位
			2)浮点数:
			    float : 单精度浮点数       4字节
				double: 双精度浮点数		8字节
				long double : 长双精度浮点数			16字节	
				
	2.构造类型:自己构造出来的类型
				数组 :一维数组、二维数组,
					int a[10]; 可以存放10int类型的数组
					数组的下表为0~9,a[10]越界,
				结构体:类似于定义一个对象  占的大小为结构体中所有属性的和(注意补倍数 char+int =1+4+3=8位)
					struct  student
					{
						char name[];    字符串类型
						int age;
					};
				联合体:共用一个内存空间  占用大小为最大的数据类型
				union a
				{
					int a;
					char b;
				};
				枚举:预先定义好,有点类似于#define
				enum a
				{
					one = 1,      //若未赋值默认为0,后面一次累加。
					twe = 2,
				};
				
	3.指针类型  在32位操作系统中指针占4个字节,在64位中占8个字节。
			int * p=NULL; 定义注意定义空指针,也不要定义野指针(int  *p)		 
			int  *p=NULL;
			需要先定义申请molloc(或指向存在)的空间
			*p代表直线的值    &p 代表(指针p)存放的空间   p表示指针指向的空间。    
											 个人理解为三层   &p -p -*p       
			*&p = p;  &*p=ERROR
	4.void类型		
				void*表示通用指针,在部分函数中可以看到
				void 作为函数参数表示没有参数
				void 作为函数返回值表示没有返回值

2.变量
在程序的运行期间,可以改变其值的数据对象。
存储变量会有一个存储单元。
并且这个存储单元必须是可写的(因为我们要改变他的值)

	  1)变量的定义
	  			变量类型    变量名  =  变量的值;
	  			int a=1;
	  			变量名:一个对象的名字,标识符标识符: 用来标识一个东西的符号
						在C语言里面标识符:
						只能由字母,数字,下划线组成,第一个字符必须是字母或者下划线。
	  2)变量的存储
	  			定义变量时会开辟一块空间,用于存储这个变量,变量存在左值(地址值&a)和右值(变量的值a)

3.整数的存储
整数的二进制的补码形式

		正数: 
				正数的补码就是其原码本身
				原码: 就是把它相应正数转化成二进制序列
						如  char  60000 0110 
		负数: 
				负数的补码就是它的绝对值的原码 取反 +1
				138bits 
							|-13| = 1313原码 : 00001101
						 	  取反   : 11110010
							   +111110011
				计算源码会发现:一个负整数会和一个比较大的正整数的补码是一样,如-2254 都是1111 1110
				计算机中存储的形式时不会变的,关键时看调用时使用的是什么,%d 表示输出int型的有符号的整数,%u表示输出int型无符号的整数,
				注意判断首位是否表示符号,
			如:int a = -2;
			-2 = > |-2|00000000 00000000 00000000 00000010
		   		取反   :  11111111 11111111 11111111 11111101
				 +111111111 11111111 11111111 11111110
			printf("%d\n", a); // -2
			printf("%u\n", a); // 2^32 - 2
			unsigned int a = -1u;
			-1 补码形式: 
				|-1|00000000 00000000 00000000 00000001
				取反 : 11111111 11111111 11111111 11111110
				+111111111 11111111 11111111 11111111 
			printf("%d\n", a); // -1
			printf("%u\n", a); // 2^32 - 1

4. 整数之间赋值的问题
在C语言,允许不同类型的整数之间相互赋值,
长->短 舍弃原码中的高字节
短->长 有符号补高字节,无符号(定义unsigned类型的)补0

				-1: 11111111 11111111 11111111 11111111	
			(char)-1                       11111111
			%d  11111111 11111111 11111111 11111111
			%u  11111111 11111111 11111111 11111111
					printf("%d\n", (char)-1);   -1
					printf("%u\n", (char)-1);   2^32-1		
		/-------------------------------------------------------------/
			-1: 11111111 11111111 11111111 11111111	
			(unsigned char)-1              11111111
			%d  00000000 00000000 00000000 11111111
			%u  00000000 00000000 00000000 11111111
					printf("%d\n", (unsigned char)-1);  255
					printf("%u\n", (unsigned char)-1);  255
		/-------------------------------------------------------------/		

5.常量

在程序的运行当中,不能够改变其值的数据对象
常量在我们的代码里面有几种:

	(1)整型常量
		在我们代码中,代表整数的常量值。
		八进制常量: 0[0-7]+以字符0开头,后面接0个或者是多个0~7的字符	
			eg: 
				0123
				0777
				0778 ERROR 
				int a = 0123; 
				printf("%d\n", a);//83	
						
			八进制与二进制对应关系:一个八进制位 对应是三个二进制的位		
				八进制         二进制
				   0             000
				   1             001
				   2             010
				   7             111
		十进制:[0-9]*
			一个或者是多个0~9的字符组成			
		十六进制: 	
			以0x 或 0X 开头,后面接一个或多个 0-9 A-F a-f 
				int a = 0xf3;
				十六进制与二进制对应的关系 
					一个十六进制位 对应四个二进制的位
					
					十六进制      二进制
						0         0000
						1         0001
						Bb        1011
						Ff        1111 
				    	255 ->  0xff	
	(2)字符常量
		字符常量用单引号引起来的一个或者是多个字符的序列在计算机中保存了字符对应的ASCII 		%c输出可以输出字符
		ASCII:由于字符不超过256,所以把我们整数值都会去对应一个字符
		A~Z 65-90
		a-z   97~122
		0~9  48~57
		      (1)普通字符
				可以打印的字符,有形状的字符
				'A' - 'Z'    
				'a' - 'z' 		
				'0' - '9' 			
			(2)特殊字符
				转义字符:不能够打印出来的,没有形状字符'\n'    '\r
					'\OOO' : 由\后面接一个或两个或三个 八进制数字组成
						这些八进制数字来表示它所期望的那一个字符ASCII								
						'A'  --- '\101'
						char c = '\101';
					'\xOO' : 由\x 后面接一个或两个 十六进制数字组成
						表示十六进制数字所期望的那一个字符的ASCII		
						'A'  101   65   41	
						char c = 'A';
						char c = '\101';
						char c = '\x41';
						
						char c = 0101;
						char c = 65;
						char c = 0x41;
	(3)浮点常量
		小数:由整数部分、小数部分、小数点、一个e\E、一个可选的带符号的
			整数指数和一个可选的表示类型的后缀(f/F/l/L)
			f/F: float
			l/L: long double 
			没有后缀: double
				float f = 2.3E3 ;       E表示10的次方  此为103次方相当于*1000			
			整数部分:可以省略
			小数部分:可以省略
			但是整数和小数部分不能够同时省略。
				float f = .3E3;  OK
				float f = 5E-5;  OK 
				float f = E5;    ERROR //整数和小数部分不能够同时省略

本文为个人(萌新)学习根据笔记复习形成,如有错误请各位指导。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值