C语言笔记变量与数据类型
目录
1.转义字符
2.常量与变量
2.1 什么是常量和变量
2.2 内存
2.3 变量的内存机制
2.4 变量命名规则
2.5 变量的定义
2.6 常量的定义
2.7 计算机内存字节顺序
2.8 局部与全局变量的区别
3.数据类型
3.1 数据表示
3.1.1进制之间转换
3.1.2计算机存储数据
3.1.3数据类型
3.1.4数据类型与内存
3.1.5正负符号的表示
3.1.6数值表示方法----原码、反码、补码
3.1.7数据类型有符号和无符号
3.1.8数据类型的取值范围
3.2 基本数据类型
3.2.1整型
3.2.2实型
3.2.3字符型
3.3 数据类型转换
3.3.1 隐式转换
3.3.2 强制数据转换
3.3.3 强制类型数据转换的影响
3.3.4 数据转换的二进制原理
1.转义字符
具体转义字符,例如斜杠、单引号、双引号转义、换行
2.常量与变量
2.1 什么是常量和变量
计算机的数据在参与程序执行过程中,有些数据需要经常变化,有些数据不需要变化。所以把数据就分为常量和变量。
常量:程序执行过程中不需要变化的。
变量:程序执行过程中需要经常变化的。
2.2 内存
内存是用于存放数据的,内存=内存地址+内存空间(内存单元)。
2.3 变量的内存机制
当程序执行,计算机就会为每个变量分配一个内存空间以供使用,通过变量名就可以实现对数据的读取、写入。
流程图:
变量名->数据类型->变量地址--->内存地址->内存空间
细节:
1,变量之所以变化,就是变量储存值得变化。
2,同一时间内,变量空间值只能保留一份值,新值冲掉旧值。
分析
a=1;
b=2;
a+b=3;
2.4 变量命名规则
标识符:用于标识常量、变量、函数的字符序列
规则:
1,_和字母开头,由字母和数字、_组成
2,严格区分大小写,
3,不能用关键字
2.5 变量的定义
1,定义变量的两种书写形式;
2,使用变量之前必须定义;
2,变量一定要初始化;
---前一个应用程序结束,操作系统并没有把内存空间数据清除,当新的应用程序开始执行,操作系统把会把闲置下来的内存重新分配给程序使用,如果没有对变量进行初始化,就有可能使用到上个程序的垃圾数据。
当然有些操作系统,会进行些默认的处理。
细节:
1,Vs2013
引用未初始化的变量,要报错
只定义未初始化,未引用不报错。可以编译通过。
引用:使内存地址与变量名关联起来?
2.6 常量的定义
1,定义常量的两种形式
Define ;const锁定变量
2,常量的特点
1,在程序执行过程中一旦定义,就不能修改其值;
2,常量的好处:可以修改定义处的值,达到修改全部引用该常量的值
2.7 计算机内存字节顺序
数据在内存空间里按照什么顺序存放。
2.8 局部与全局变量的区别
函数内称为局部变量,外面就是全局变量
局部变量: 没有生明和定义的差别;
全局变量:有声明和定义的差别,定义只能一个,声明可以多个
3.数据类型
3.1 数据表示
正确表示一个十进制的数65 int a,b,c; a=65; //65十进制形式 b=0101;//65八进制形式 c=0x41;//65十六进制形式 错误表示一个十进制的数65 a=65; //十进制是65 b=065; //十进制是53 c=0x65; //十进制是101
3.1.1进制之间转换
二进制、八进制、十六进制转十进制------按权相加;
二进制转八进制,八进制转二进制------三位;
二进制转十六进制,十六进制转二进制-----四位;
十进制转二进制------整除;
十进制小数转换为二进制------乘2取整
3.1.2计算机存储数据
数据是以二进制位序列的方式存放于内存中。
二进制序列->加上结构的概念->称为字节。8个位为一个字节。
内存起始编号为1,每隔8位编号增1,对内存进行编号管理。
3.1.3数据类型
数据类型主要是对计算机出现的数据进行一个分类
数据类型种类:
1)基本数据类型:数值(整型、实型)和字符型
2)构造类型:数组、结构体、共用体
3)指针类型:
4)空类型:
3.1.4数据类型与内存
不同的数据类型占据不同的空间,整数从数学上就是从负无穷到正无穷之间的任意数,但是内存是有限的。
3.1.5符号的表示
整数的正负----用最高位表示符号,0表示正,1表示为负。
3.1.6数值表方法---原码、反码、补码
怎么求一个数值的原码、反码、补码
在计算机中,数值一律用补码来表示(存储)
原因
1,使用补码,可以将符号位和其它位统一处理,减法也可按加法来处理,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
2,使用原码,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。
图。。。。。。。。。。待补充
3.1.7 数据类型的符号
数据类型分为:有符号和无符号
3.1.8 数据类型的取值范围
一个数据类型能表示的最小值 、最大值。
3.2 基本数据类型
3.2.1整型
1)整型常量三种表示形式:十进制、八进制、十六进制
细节:整型常量的取值范围受到打印控制符决定的。
2)整型变量根据取值范围分为:short 、int、 long(默认有符号,可以指定为无符号)
细节:超出数据类型的表示范围,就会数据溢出。越过一定范围就会出错!
3)整型变量的内存分析
4)可以夸平台移植的整数
Int : 16位为2个字节, 32位4个字节
Long :64位Linux8个字节,Windows 32/64位都是4个字节
3.2.2实型
小数点位置固定不变的称为定点数,小数点位置可以浮动的称为浮点数。在计算机中,用定点数表示整数和纯小数,即有整数部分、又有小数部分的用浮点数表示。
科学计数法:1.234E2 其中1.234为尾数,10为基数,2为指数。
浮点数利用指数达到浮动小数点的效果,灵活的表达更大的实数。
1)两种表示形式:十进制,指数
2)浮点型数据分为:单精度(4个字节,6-7位有效数字)和双精度(8个字节,15-16位有效数字)。例如,1.0(8个字节),1.0f(4个字节)
3)为什么用浮点数表示实数?
1.01
1.0001
1.00000001
不能用整数一一对应方式,浮点数利用指数达到浮动小数点的效果,灵活的表达更大的实数;打印int与float 极值可以,得出都占4个字节,float能表达更大的值。
3)浮点数的误差
5)三种类型:float 、double、long double
输入、输出float,用%f;
输入、输出double,用%lf
输入、输出long double,用%Lf;
6) 浮点内存原理
3.2.3字符型数据
1,字符常量:单引号括起来的单个字符或转义字符。
字符常量的值:该字符的ASCII码值
1)用putchar(),分别使用单引号、十进制、八进制、十六进制输出字符
2)用putchar()输出转义字符
//0x41(十六进制)=='\x41'(字符)==65(十进制)==A(字符); 方式一 char ch0,ch1, ch2, ch3; ch0 = 'A'; ch1 = 65; ch2 = '\x41'; ch3 = 0x41; printf("%c,%c,%c,%c",ch0,ch1,ch2,ch3); 方式二 putchar('\n'); putchar('A'); putchar(65); putchar('\x41'); putchar(0x41);
2,字符串常量:用双引号括起来的字符序列。
1),每个字符串尾自动加个‘\0’作为字符串结束标志。
2)字符串不能赋值个字符变量
3)用printf输出字符串
3,字符常量与字符串常量的区别?
3字符型数据---char
字符变量在内存中占一个字节,存储的事字符的ASCII值。
取值范围:
char :-127~+127
unsigned char :0~255;
char ch=128 //取值范围-127+127 0111 1111//最大值+127 +1 //数据溢出 1000 0000//进位后内存中二进制形式, %d 带符号十进制整数,所以是4个字节 ,以符号进行填充。 填充后如下: 1111 1111 1111 1111 1111 1111 1000 0000 二进制--补码形式 1111 1111 1111 1111 1111 1111 0111 1111 反码 1000 0000 0000 0000 0000 0000 1000 0000 原码 -128 十进制 %x 无符号十六进制整数,所以是4个字节,以符号进行填充。 填充后如下: 1111 1111 1111 1111 1111 1111 1000 0000 原码-二进制 f f f f f f 8 0 无符号十六进制 printf("%d,%x",ch,ch)//-128,ffffff80
1与‘1’的区别?
ASCII特殊字符
宽字符问题
英文字符---1个字节,汉字---2个字节。当用一个汉字去表示字符,就会出现宽字符问题,处理宽字符就把汉字当作一个字符。
3.3 数据类型转换
3.3.1 隐式转换
1,表达式计算
1)小的数据类型转向大的数据类型
2)有符号转向无符号
3)char\short直接转成int类型
2,赋值号类型换
3.3.2 强制数据转换
强制转换得到只是个中间变量,不会改变原数据的值。
结论:强制转换可以将类型转成掐好解析的类型,就可以的到正确的结果。
3.3.3 强制类型数据转换的影响
1,精度损失
2,数据溢出
3.3.4 数据转换的二进制原理
char ch=128 //取值范围-127+127 0111 1111//最大值+127 +1 //数据溢出 1000 0000//进位后内存中二进制形式, %d 带符号十进制整数,所以是4个字节 ,以符号进行填充。 填充后如下: 1111 1111 1111 1111 1111 1111 1000 0000 二进制--补码形式 1111 1111 1111 1111 1111 1111 0111 1111 反码 1000 0000 0000 0000 0000 0000 1000 0000 原码 -128 十进制 %x 无符号十六进制整数,所以是4个字节,以符号进行填充。 填充后如下: 1111 1111 1111 1111 1111 1111 1000 0000 原码-二进制 f f f f f f 8 0 无符号十六进制 printf("%d,%x",ch,ch)//-128,ffffff80