一.C中操作符分类:
算数操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号引用操作符
下表引用、函数调用和结构体
二.各类操作符的用法
1.算数操作符
(1)包括:+ - * / %
(2)用法:与数学中用法一致(%为求模运算,也就是取余数)
(3)注意事项:
1)除了%操作符,其余均可用作整数和浮点数。
2)对于/操作符:两操作数均为整数就为整数除法;否则为浮点除法。
2.移位操作符
(1)包括:<< 左移操作符
>> 右移操作符
(2)用法:
1)左移:
规则:左边抛弃,右边补零。
2)右移:
右移分两种:
1、逻辑移位:左边用零填充,右边丢弃。
2、算数移位:左边补原来符号位,右边丢弃。
(3)注意事项:在执行移位操作时,只在cpu中移位,不写回内存,即其自身值不发生改变,若需改变,需要进行赋值运算。如:int num = 1; 在执行num<<1;后num的值不改变,依旧为1;需要改变它的值用赋值语句:num = num<<1;
3.位操作符
(1)包含:
& 按位与
| 按位或
^ 按位异或
(2)用法:
1)按位与:对运算符两侧以二进制表达的操作数按位分别进行与运算。
规则:两数都为一输出为1,其余均为零。
2)按位或:对运算符两侧以二进制表达的操作数按位分别进行或运算。
规则:两数至少有一个为1,则该值为1。
3)按位异或:对运算符两侧以二进制表达的操作数按位分别进行异或运算。
规则:相同为0,相异为1。
(3)注意事项:位运算非常灵活的操作符,异或运算是相同比特为会清零,任何数和零异或是它本身。运算的操作数必须为整数。
较为经典的题:
按位与的经典用法
int count_one_bits(unsigned int num)
{
int count = 0;
while (num)
{
count++;
num = num&(num - 1); //运用按位与运算可以很巧妙的求出一个数二进制数中一的个数
}
return count;
}
int main()
{
int num = 0;
scanf("%d", &num);
int ret = count_one_bits(num);
printf("二进制数中1的个数:%d\n", ret);
system("pause");
return 0;
}
按位异或的经典用法:
(在不创建临时变量的前提下交换两个数的值)
{
}
4.赋值操作符
(1)包含:= += -= *= /= %= >>= <<= &= |= ^=
(2)用法:“=”赋值运算就是将一个数值赋值给一个变量。如:int a=1;//则a的值就是1。
例如:a += 1相当于a = a+1;
其余的用法与上述举例相同。
5.单目操作符:
(1)包含与用法:
运算符 | 含义 |
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 自减运算符 |
++ | 自增运算符 |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
(2)用法:
1)自增“++”自减“--”运算
a)前置++,前置--
例如:int a = 1; ++a表示:a=a+1;之后在使用a的值。(--a用法与++a相同)
b)后置++,后置--
例如:int a = 1; a++表示:先使用a=1的值,然后执行+1操作,将a的值变为 2。(--a用法与++a相同)
2) sizeof:用来求变量多占空间的大小。
例如:sizeof(int)的值是4。因为int型占四个字节。(其余变量与之相同)。
sizeof与数组:
例如:定义一个数组int a[10] = {0,1,2,3,4,5,6,7,8,9};
a.则sizeof(a)= 40;//int型占4个字节,共有10个元素,则占40字节。
b.用sizeof求数组元素的个数:sizeof(a)/sizeof(a[0]);
//用数组的总长度/一个元素的长度。
3)*操作符:指针变量:如:int *p;
解引用。
6.关系操作符:
(1)包含:> >= < <= != ==
(2)用法:与数学中用法相同。
(3)注意事项:例如:x=get_value(); if(x=5){处理事件;},可以发现条件少写了 “=”,变成了赋值语句。(解决办法:写成if(5==x)的形式)
7.逻辑操作符:
(1)包含:&& // 逻辑与
|| //逻辑或
(2)用法:用来判断逻辑的真或假。
(3)注意事项:当执行&&运算时:第一个是0,则后面的运算不需要执行。
当执行||运算时:第一个是1,则后面的运算不需要执行。
8.条件操作符
(1)包含:exp1 ? exp2 : exp3
(2)用法:例如:
if(a>2)
{b = 3;}
else
{b = 5;}
可以用条件操作符改写为:b = (a > 2)? b = 3 : b = 5;
9.逗号引用操作符:
(1)形式:exp1,exp2,exp3…expn
(2)用法:从左到右依次执行,以最后一个表达式的值为主。
10.下表引用、函数调用和结构体:
(1)包含及用法:
1)[]操作数:一个数组名+一个索引值
int arr[10];//创建数组
arr[9]=10;//实用下标引用操作符
上例的操作数分别是:arr和9;
2)()函数调用操作符:接受一个或多个操作数:第一个是函数名,其余都是 传递给函数的参数。
3)访问一个结构的成员:
.结构体.成员名
->结构体->成员名