1.算术运算符:
正号运算符: +
负号运算符: -
乘法运算符:*
除法运算符:/
求余运算符:%
加法运算符:+
减法运算符:-
特别注意: +和-在不同情况下的含义
自加与自减运算:
++i,--i,i++,i--
在使用i之前,先是i的值加(减)1,在使用i之后,使i的值加(减)1
特别注意:自增和自减运算符只能用于变量,而不能用于常量或表达式
在表达式求值时,先按运算符的优先级别顺序执行,例如先乘除后加减。如果在一个运算对象两侧的运算符的优先级别相同,则按照结合方向“自左至右”即先左后右执行。
+,-,*,/运算的两个数中有一个数为float或double型,结果是double型。
如果int型与float或double型数据进行运算,先把int型和float型数据转换为double行进行运算,结果是double型。
字符型数据与整型数据进行运算,就是把字符的ASCII代码与整数数据进行运算。
一般形式:
(类型名)(表达式)
(double)a:将a转换成double类型
(int)(x+y):将x+y的值转换成int型
2. 关系运算符:
C语言提供6种关系运算符:
<(小于),
<=(小于或等于),
>(大于),
>=(大于或等于), **前4个优先级相同**且前4个高于后2个
==(等于), **后2个优先级也相同**
!=(不等于)
注意:在C语言中,"等于"关系运算符是双等号"= =",而不是单等号"= "(赋值运算符)。
优先级
在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。
与其它种类运算符的优先级关系:
算术运算符的优先级> 关系运算符的优先级>赋值运
3.逻辑运算符&&:
且:且运算需要使用关键字符&&,表示将两个或者多个表达式连接成一个,所有表达式必须都为true,整个表达式才为true,否则为false;
或||:或运算需要使用关键字符||,表示将两个或者多个表达式连接成一个,任意一个表达式为 true,整个表达式就为 true;只有当所有表达为false的时候,整个表达式才为false;
非:非运算需要使用关键字符!,用于将单个表达式结果取反,如果原表达式的结果为false,在表达式前面加上运算符!结果取反之后就是true;如果原计算结果是true,在表达式前面加上运算符!结果取反之后就是false;
4.位运算符:
运算符 含义
& 按位与
¦ 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
5.赋值运算符:简单赋值运算符
简单赋值运算符的使用形式为v = e。e可以是常量、变量或表达式。如果v和e的类型不同,在赋值过程中会发生类型转换,将e的值转化为v类型的值,然后赋给v。
C语言中,赋值操作产生结果,结果就是v的值。因此可以将赋值表达式作为操作数嵌入到其他表达式中,在表达式中是右结合的。但不建议这样使用,因为这会造成代码不易理解且可能会产生隐含错误。
=用在变量的初始化时int v = e,它不会产生结果,因此,这时它不是一个运算符,而是和所有元素一起组成了一个初始化语句。
赋值表达式左边的操作数必须是左值,即存储在计算机存储单元中的对象,不能是常量和计算结果。
.复合赋值运算符
复合赋值运算符的使用形式为v op= e,等价于v = v op e。其中op可以是+,-,*,/,%,&,^,|,后三个为按位运算符。
自增和自减运算符
相对于i += 1和i-= 1,C语言提供了自增++和自减--运算符将这个语句进行更加简练的缩写i++, i--。但是形式上的精简却并没有带来复杂性的简单,因为它们既可以做前缀运算符也可以做后缀运算符,在执行中具有不同的意义。++i和--i意味着立即自增或自减1,而i++和i--意味着先用i的值进行计算,然后在下一条语句执行前在对i自增或自减。后缀++和--比一元正负号优先级高,且都是左结合的,前缀++和--运算符和一元正负号优先级相同,且都是右结合的。
6.条件运算符
C语言中的条件运算符运用的较少,为了加强大家对它的了解,叙述如下:
该运算符是 ? :
表达式为:表达式1?表达式2:表达式3
先求解表达式1,
若其值为真(非0)则将表达式2的值作为整个表达式的取值,
否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。
例如:
max=(a>b)?a:b
就是将a和b二者中较大的一个赋给max。
7.逗号运算符:在C语言中,逗号“,”的用法有两种:一种是用作分隔符,另一种是用作运算符。
在变量声明语句、函数调用语句等场合,逗号是作为分隔符使用的。
例如:
int a,b,c;
scanf('%f%f%f',&f1,&f2,&f3);
C语言还允许用逗号连接表达式。例如x=5.6,y=2.1,10+x,x+y这里用三个逗号运算符将四个算术表达式连接成一个逗号表达式。
8.指针运算符:
指针就是地址,指针也是C语言的一种数据类型
用指针类型定义的变量称作指针变量,指针变量储存的不是普通数据而是一个地址,一个变量的地址称为该变量的指针。
指针变量定义的一般形式为:
类型标识符 * 变量名
星号是指针类型的标志。
C语言指针变量的使用需要以下两个运算符
&:取地址运算符,它返回运算对象的内存地址。
* :指针运算符,也称为“间接引用操作符”,它返回指针指的变量的值。
9.求字节数运算符:字节数运算符是一个单目运算符,该运算符的作用是求得某种类型或者变量在内存中所占字节数。其使用格式如下:
sizeof(<类型说明符>)或者sizeof(<变量名>)
sizeof是一个比较特殊的运算符,因为sizeof运算符多了一个括号,这很容易让人认为这是一个函数而不是一个运算符,操作数只是函数的参数罢了。这一点特别需要引起注意,sizeof不是函数,它是一个运算符。
10.强制类型转换运算符:
一般形式: (类型名)(表达式常量变量)
(double)a
不管a原来是什么类型,此时临时将其强制变成double类型。
例:
(int)(x+y)将x+y的值转换为整型
(float)(5%3) 将5%3的值转换成单精度型2.0
(double)a 将a变成double型
注意:
优先级2级
(int)(x+y)与(int)x+y 【转换x加y的意思】意义不同
类型转换得一个中间值,原变量类型没有发生变化。
11.成员运算符:
C语言中:
我们临时定义一个结构体:
struct StuInfo{
int num;
char name[20];
char sex;
float score;
};
//初始化两个结构体类型的变量,和一个指向定义结构体类型的指针变量
struct StuInfo student1;
struct StuInfo Student2;
struct StuInfo* ptr;
//初始化指向结构体类型的指针变量
ptr = &Student2;
访问这两个结构体成员时,用成员运算符还是指针运算符:
student1是一个StuInfo结构体类型的变量,引用它时只能用成员运算符(.)即:
student1.num ,student1.sex等;
ptr 是一个指向StuInfo结构体类型的指针变量,注意它是指针变量,故按传统方式访问它的成员时,我们可以用解除引用运算符(C++中定义,相应的引用运算符为&)访问成员:(*ptr).num, (*ptr).score等,注意*ptr要括起来,因为所有运算符优先级中成员运算符(.)的优先级最高,这样是不是很不方便,也容易出错,为了方便和直观,C语言规定可以用指针运算符(-〉,有些书中称为指向运算符,但我觉得指针运算符更确切些。)代替,即
ptr->num, ptr->name, ptr->sex等,这样方便了很多。
C++中:
其实和C差不多,只是C++中除了结构体之外还多了类的概念。
Class Human {
//Data attributes:
string Name;
string BirthDay;
string Gender;
//Method:
void Talking(string TalkContent);
void IntroduceSelf();
...
};
Human Tom;
Human* p;
p = &Tom;
Tom.BirthDay = "1969“;
Tom.IntroduceSelf();
效果等价于:
p->BirthDay = "1969";
p->IntroduceSelf();
文