1. C语言数据类型
基本类型
整型 :存整数的
int short long
(unsigned) int
字符型
(unsinged)char
实型(浮点型) : 存小数
单精度实型号float
双精度实型 double
构造类型
数组类型
结构体 struct
联合 union
枚举 enum
指针类型
*
空类型(void)
1.1. 常量与变量
(1) 常量:在程序运行期间,其值不能被改变的量称为常量。
符号常量
const
(2) 变量: 变量代表内存中具有特定属性的一个存储单元,它用来存放数据(这个数据就是变量的值),在
程序运行期间,这些值是可以改变的。
变量类型 变量名;
变量名, 实际上是一个以一个名字对应代表一个地址,在程序编译时由编译系统给每一个变量名分配对应的内存地址。
a: 从变量中取值, 实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据;
b: 给变量赋值,实际是是通过变量名找到相应的内存地址,把数值存储到该内存地址中去。
标识符(指变量名,函数名,标号等): 由字母、数字、下划线组成,且第一个字符必须为字母或下划线。
1.2 整型数据
整型常量 : 十进制数, 八进制数(以0开头), 十六进制(0x)
整型变量: 整型数据在内存中是以二进制补码形式存放的。
signed : int , short , long. 最高位是符号位,1 代表负数, 0代表是非负数
unsigned : unsinged int , unsigned short ,unsigned long。 所有bit位都是数值位。
13 / -13在内存中的实际存放情况。
在CPU内部是没有符号位的概念的,对于CPU来说,所有位都是数值位,都参与运行运算,
至于是正数还是负数,由编译器词义决定(看编译器怎么解释,实际上就是看编译器把它当
作是有符号数还是无符号数)。
//(不同的编译器,长度不同)
// short 2bytes
//int 4bytes
// long 4bytes
整数赋值: C标准建议
short 赋值给 int : (有符号数 短->长)
低字节直接拷贝,高位补符号位 (符号位扩展)
unsigned short 赋值给 unsigned int :(无符号数 短->长)
低字节直接拷贝,高位补0
int 赋值给 short (signed ,unsinged 长->短)
只拷贝低字节
1.3 字符数据
char /unsigned char 字符类数据在计算机中是以ASCII码的二进制来存储。
ASCII码: 给每一个字符(比如'A', '0', ...) 取一个整数来表示它,那么这个整数就是所谓的ASCII码
char/unsigned char 也是一个整型。占一个字节。
char c = 'A' ; //‘’引用单个字符。 'A'
// "" 字符串
1.4 浮点数据 “存储”
float 32bits
double 64bits
浮点型数据的“存储”,请看 图示。
1.5 变量赋值(及赋初值)
int a ; //定义语句
int a = 5; //定义并赋初值语句
《=》 int a;
a = 5;
2 运算符。
(1) 算术运算符 + - * / %, ++ --
%求余运算符,要求操作数都必须为整数。
根据运算符要示的操作数的个数,我们可以把运算符归为以下三类:
双目运算符,
单目运算符,
三目运算符,
++自增运算符,把自己的值加1
a++ 表达式值为a, 做完这个表达式后a = a + 1
++a 表达式值为a+1, 做完这个表达式后a = a + 1
--自减运算符,把自己的值减1
a-- 表达式值为a,做完这个表达式后a = a -1
--a 表达式值为a-1, 做完这个表达式后a = a - 1
(2) 关系运算符 > >= < <= == !=
(3) 逻辑运算符 && || !
(4) 位运算符
(5) 赋值运算符 =
a = 5
赋值运算是把右边表达式的值,写入到左边那个东西对应的存储单元中去。
赋值运算符要求:
两个操作数必须属于同一类型(或兼容类型, 兼容类型是指可以转换的类型) ;
赋值运算符左边的操作数必须要对应一个可写的存储单元。(变量)
3 + 5 = a ; (错的)
复合的赋值运算符(算术运算符,位运算符与=连接)
+=, -=, *= /= ,....
<<=, .....
a+=5 <=> a = a + 5;
x *= 3 + 5 <=> x = x * (3 + 5)
赋值表达式
a = 5
赋值表达式的值为:赋值后左边那个变量的值
a = 3 + 5 * 6 这是一个赋值表达式,而这个赋值表达式的值就是最后a的值
(6) 条件运算符
(7) 逗号运算符
表达式1,表达式2
求解过程:
先算表达式1,再算表达式2,
最后这个逗号表达式的值是表达式2的值
扩展逗号表达式:
表达式1, 表达式2, ...., 表达式n
求解过程:
先算表达式1,再算表达式2, ...,最后算表达式n,
整个逗号表达式的值为表达式n的值。
(8) 指针运算符
(9)求字节运算符 sizeof
(10) 强制类型转换运算符 (int)
(类型B)(表达式A)
把表达式A的值强制转换为类型B
(11) 分量运算符 (. ->)
(12) 下标运算符 []
(13) 其他(如函数调用运算符)
3. 表达式
表达式一个某某意思的式子。
在C语言中,表达式是指用运算符连接其操作数的式子,叫表达式。
a + b
算术表达式,就是由算术运算符连接的表达式,叫做算术表达式。
a + b * 5 - 7
a = 6 + 5 (赋值表达式,)
表达式的值。
任何一个表达式,都会有一个值。