一、常量
不可以改变的值。
1.
3 -int
3L -long int
3LL -long long int
3u -unsigned int
3ul -unsigned long
2.
3.5 -double
3.5f -float
3.5L -long double 2^96 16Byte
二、sizeof(参数)
计算出数据所占内存空间大小,以字节单位。
参数可以是类型、变量或表达式,但sizeof()不负责计算表达式的值,只关注类型。
sizeof(参数)对应的数据类型是long unsigned int->%ld
三、运算符
C语言的一个特点是它更强调表达式而不是语句,表达式是表示如何计算值的公式,最简单的表达式是常量和变量,变量表示程序运行的时候需要计算的值,常量表示不变的值,更加复杂的表达式把运算符用作操作数。
1.算术运算符
a.+、-、*
b./(求商)和%(求余、取模)
1)/ 整数相除,取整数部分
2)/和%都不能对0操作,否则中断程序,但/0.0允许,无穷大(inf)。
3)%只能用于整数,浮点数不支持
4)/向0取整(取更靠近0的数),运算时的符号与数学中的定义是一样的
5)%符号与%前面的数字符号相同,运算时的符号与数学中的定义是不一样的
2.赋值运算符 =
a.把等号右边的值赋给左边的变量
赋值从右向左
int i = 10;
int j=20,k=30;
i=j=k=6;注:不推荐
b.左边必须是一个左值(变量),不能是常量,也不能是表达式
i+j = 10;错误
int 10 = x;错误
c.=代表赋值 ==代表相等
d.赋值可以和其它运算符结合使用,叫复合赋值
i+=3 -> i = i + 3
优点:+=(*一个操作数) 比 = + (二个操作数)效率高
3.自增、自减运算符
a.++或--:变量自增或自减,不能用于常量。
b.可以使用*整型变量 int/short/long、浮点型float/double和字符型char变量。
c.前缀表达式++i,先自增(减),再运算
后缀表达式i++,先运算,再自增(减)
d.i,++i,i++,从内存上说是同块内存
e.在同一个表达式中不要对同一个变量多次进行自增或自减操作,难度加大,代码变的不可读。
k=++l + l++ + l++;
4.关系运算符
a.主要用来表示两个或多个数、变量、表达式之间的关系。
b.在C语言中,关系运算符和数学上的>、<、>=、<=相对应的,==等于、!=不等于,表达式产生结果,1(成立)或0(不成立)
c.关系运算符也可以用于比较整数和浮点数,也允许混合类型操作数。
5.逻辑运算符 &&与 ||或 !非
通常用来表示表达式间的关系
a.逻辑运算符所产生的结果:逻辑结果0(不成立、假)或者1(成立、真)
b.当操作数处理结果不是1或者0时,逻辑运算符将非零操作数作为真值处理。 1真 非0真 0假
c.&&与(且)、||或、!非
d.表达式1 && 表达式2 逻辑表达式的结果为
真 真 真
真 假 假
假 真 假
假 假 假
两者都为真,逻辑表达式结果才为真
e.表达式1 || 表达式2 逻辑表达式的结果为
真 真 真
真 假 真
假 真 真
假 假 假
两者只要有其一为真,逻辑表达式结果就为真
f.非(取反)关系表达式
表达式1 !表达式1
真 假
假 真
g.短路运算
1)短路与:若第一个表达式的值为假,后面的表达式不再计算
2)短路或:若第一个表达式的值为真,后面的表达式不再计算
6.取地址&和寻址运算符*
a.在变量前加上&,得到的就是变量在内存中的地址
b.内存会被划分成以字节为单位,一块一块的空间
每一个空间都有唯一的标识,内存地址。
c.在地址前使用*寻址符号,得到该地址保存的数据、值。
7、类型转换
a.类型升级
类型升级,浮点型高于整型,长整型高于短整型,有符号与无符号取有符号。
在C语言中,类型转换是没有提示的
高 long double
double
float
long long
long
低 int
a.类型升级
低精度的值赋值给高精度的值是没有问题的
int i = 10;float f = i;
高精度的值赋值给低精度的值是有可能有问题的
int i2 = 200;
char c = (char)i2;//最好在代码中提示
b.其它转换
1)浮点型和整型运算,转换浮点型(double)后运算
2)short/char的运算转成int后运算
c.如果程序中进行类型转换,可以使用强制类型转换
目标类型 变量 = (目标类型)源类型变量;
注:类型转换的时候,实际是建立了一个新的变量(开辟了新的内存空间),原有的变量不变。
8.条件运算符 多目运算符 三目运算符
1.语法格式:
条件表达式?表达式1:表达式2;
2.若条件表达式值为真值,则条件表达式的值为表达式1的值,若条件表达值为假,则条件表达式的值为表达式2的值。表达式1和表达式2为不同的基本类型时,会自动转换二者中精度较高的类型。
9.逗号运算符
表达式1,表达式2,表达式n;
1.依次计算各表达式的值,以表达式n的值作为整个表达式的结果
2.并不是所有出现逗号的地方都组成逗号表达式,如果在声明变量、函数的参数中,逗作用就是分隔符。
10.运算符的优先级
a.单目运算符(++、--)优先级较高,赋值运算符优先级较低,算术运算符优先级比较高,关系运算符和逻辑运算符优先比较低。从高到低参考关系:如
高 初等运算符:()、[]、.
| 单目运算符:!、++、--、类型转换、&、*、sizeof()
| 算术运算符:先*、/、%、后加、减
| 关系运算符:>、>=、<、<= 高于!=、==
| 逻辑运算符: !高于&&高于||
| 条件运算符:?:
| 赋值运算符: =、+=…复合赋值
低 逗号运算符:,
注:如果无法确定优先级,可像数学中的情况一样,使用()符号。
b.运算顺序(结合性)
多数运算符具有左结合性,单目/三目/赋值运算符具有右结合性。
左结合性:a+b+c=>(a+b)+c
右结合性:a=b=c=>a=(b=c)