C语言操作符总结
程序员文章站
2022-05-11 12:45:54
...
C语言操作符总结
学会使用操作符是学习C语言的基础
1.算数操作符
+ - * / %
- 以上均为双目操作符,加,减,乘,除,取余;(双目操作符:运算所需变量为两个的操作符;)
-
%
的操作数只能是整数,作用是取余数。 - 除
%
外其他都可以用于浮点数。
2.移位操作符
<<左移操作符
>>右移操作符
移位操作符移动的是二进制位
右移对于无符号类型强制补0,对于有符号类型续补符号位
用移位运算符不可以移动负数位,这是因为在C标准中没有这样的定义
移位规则:
- 左移:内存中左边的丢弃,右边补0
int n = 10;
n<<1;
// |00000000000000000000000000001010|
// 0|00000000000000000000000000010100|
当n没有被赋值时是不会改变它的
- 右移:右移分两种
1.逻辑移位:左边被0填充,右边丢弃。
int n = -1;
//-1的补码:
// |11111111111111111111111111111111|
//进行逻辑右移
// |01111111111111111111111111111111|1
//左边补0,右边超出的1丢弃
2.算术移位:左边用原值的符号位填充,右边丢弃。
int n = -1;
//-1的补码:
// |11111111111111111111111111111111|
//进行算术右移
// |11111111111111111111111111111111|1
//左边补-1的符号位,右边超出的1丢弃
3.位操作符
& --> 按位与 :两操作数的二进制位相与;
| --> 按位或 :两操作数的二进制位相或;
^ --> 按位异或 :两操作数的二进制位相异或,相同为假,相异为真;
它们的操作数必须是整数
4.赋值操作符
=
这个操作符可以随时改变变量的值
int a = 10;//将10赋给变量a。
注意:有时当你想用“= =”却不小心用了“=”时,编译器是不会报错的,但会改变你程序本来的意思
5.复合赋值操作符
+= // a += 2; a = a + 2;
-= // a -= 2; a = a - 2;
*= // a *= 2; a = a * 2;
/= // a /= 2; a = a / 2;
&= // a &= 2; a = a & 2;
>>= // a >>= 2; a = a >> 2;
<<= // a <<= 2; a = a << 2;
%= // a %= 2; a = a % 2;
^= // a ^= 2; a = a ^ 2;
|= // a |= 2; a = a | 2;
使用复合赋值会让代码看起来更简洁;
6.单目操作符
单目操作符 | 作用 |
---|---|
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof |
操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
- - | 前置,后置- - |
++ | 前置,后置++ |
* | 解引用操作符(间接访问操作符) |
(类型) | 强制类型转换 |
例:注意sizeof不是函数
int main()
{
int a = -1;
int b = 0;
int *p = &a;
if( !b == 1)
{
printf("%d\n",*p);
printf("%d\n", sizeof(b));
b++;
}
return 0;
}
int a = 0;
printf("%d", sizeof(a));//输出4,计算的是变量“类型”所占空间的大小
printf("%d", sizeof(int));//输出4 这两种写法都是正确的
printf("%d", sizeof int);//注意这里是错误的写法,但是sizeof a是正确,不相信的可以去试一下~
前置++和- -:
操作数先自加(减)1后使用;
后置++和- -:
操作数先使用后自加(减)1;
7.关系操作符
关系操作符 | 作用 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
== | 等于 |
基本用于判断,注意区分==
和=
8.逻辑操作符
&& 逻辑与
|| 逻辑或
逻辑与和逻辑或的特点是什么:
- 当&&左边为假时不再计算&&右边的真假,整个表达式为假;
- 当||左边为真时不再计算||右边的真假,整个表达式为真;
注意区分
按位与 和 逻辑与
按位或 与 逻辑或
9.条件表达式
exp1 ? exp2 : exp3;
什么意思呢:
表达式1为真,执行表达式2,否则执行表达式3;
if(a > 5)
{
b = 3;
}
else
b = -3;
//可以写成下面的形式
//b = (a > 5 ) ? 3 : -3;
10.逗号表达式
exp1, exp2,exp3, ...expn
逗号表达式是怎么个用法呢,就是从左向右依次执行表达式,但是整个表达式的结果是最后一个表达式的结果。
11.操作符优先级
1.任何一个逻辑运算符的优先级低于任何一个关系运算符。
2.移位运算符的优先级比算术运算符要低,但是比关系运算符要高。
C语言运算符优先级表(由上至下,优先级递减)
运算符 | 结合性 |
---|---|
(), [] , -> , . | 自左向右 |
!, ~ , ++ , - - , - ,(type), * , & , sizeof | 自右至左 |
* , / , % | 自左向右 |
+ , - | 自左向右 |
<< , >> | 自左向右 |
<, <=, >, >= | 自左向右 |
==, != | 自左向右 |
& | 自左向右 |
按位或 | 自左向右 |
&& | 自左向右 |
逻辑或 | 自左向右 |
, | 自左向右 |
以上就是全部总结了,水平有限,如果有遗漏或错误请指出,谢谢~
上一篇: Dockerfile 之 VOLUME
下一篇: C#学习总结一