C语言操作符
c语言操作符
操作符的种类
- 算术操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号表达式
- 下标引用,逻辑调动和结构成员
算术操作符
+ - * / %
注: 除了%符号之外,其他的符号都可以进行整型或者浮点型的运算。
对于/符号,如果两个操作数都为整型则进行整型运算,而只要有一个浮点数则进行浮点数运算。
对于%符号,两个操作符必须为整数,返回的值为整除之后的余数。
移位操作符
<< 左移操作符
>> 右移操作符
左移操作符规则:左边抛弃,右边补零。
(将一个数字在内存中的的二进制形态最左边一位抛弃,右边补零就可完成左移操作)
- 比如整数num(num=8)在内存中的二进制位为:
00000000000000000000000000001000
- 执行左移操作之后num为:
00000000000000000000000000010000
我们要注意的是,内存中的num并没有改变,只有在执行赋值操作之后num的值才会改变!程序验证如下:
int main()
{
int num = 8;
num << 1;
printf("%d\n", num);
system("pause");
return 0;
}
程序的运行结果如下:
8
请按任意键继续. . .
int main()
{
int num = 8;
num <<= 1;
printf("%d\n", num);
system("pause");
return 0;
}
16
请按任意键继续. . .
当我们给num重新赋值的时候num的值就会变了
右移操作符规则:
右移运算分为两种:一种是逻辑位移,一种是算术位移
逻辑位移:左边补0,右边抛弃(适用于无符号数)
算术位移:左边用原来该值的符号位填充,右边抛弃(适用于有符号数)
位操作符
&(按位与) |(按位或) ^(按位异或)
它们的操作数必须为整数
利用按位异或可以实现不借助中间变量实现两个数字的交换
int main()
{
int a = 5;
int b = 8;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a等于%d\n", a);
printf("b等于%d\n", b);
system("pause");
return 0;
}
运行结果为
a等于8
b等于5
请按任意键继续. . .
赋值操作符
=
顾名思义,赋值操作符就是可以给变量赋值的操作符.
比如
int a=10;
a=20;
int high=100;
high=180;//我们可以对我们不满意的变量值进行更改
复合赋值符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
这些运算符都可以写成复合的效果
比如:
int a = 10;
a = a + 10;
a += 10;//这句代码与上一句含义相同,但是代码简洁了许多,比较容易阅读。
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作符的类型长度
~ 对一个数字的二进制位进行按位取反
-- 自减操作符
++ 自加操作符
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
单目操作符里面我们要注意的就是sizeof这个操作符,在我一开始接触sizeof时我认为他是个函数,后来经过学习我才知道原来sizeof是一个操作符。
注意++a和a++的意思是不同的,++a表示先加后用,而a++表示先用后加。
关系操作符
>
<
>=
<=
!=
==
在使用关系运算符的时候我们要注意=和==的区别,经常不小心把==写成=,意思就差很多了。
逻辑操作符
&& 逻辑与
|| 逻辑或
要区分清楚逻辑与和按位与以及逻辑或和按位或。
条件操作符
exp1 ? exp2 : exp3
这个表达式的含义就是
if(exp1)
{
exp2;
}
else
{
exp3;
}
逗号表达式
exp1,exp2,exp3,exp4…expN
逗号表达式就是用逗号隔开的多个表达式,从左向右依次执行,整个逗号表达式的结果就是最后一个表达式的结果。
下标引用、函数调用和结构成员
1.[ ]下标引用操作符
操作数:一个数组名+一个索引值。
比如arr[5]
[ ]他的两个操作数是arr和5。
2.函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
比如 add(a,b)
它的三个操作数分别是函数add,参数a,b。
3.访问一个结构体的成员
.结构体.成员名
->结构体指针->成员名
下一篇: C语言可变参数函数实现printf功能