欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言操作符总结

程序员文章站 2022-05-11 12:45:54
...

C语言操作符总结

学会使用操作符是学习C语言的基础

1.算数操作符

      +     -     *      /     %
  1. 以上均为双目操作符,加,减,乘,除,取余;(双目操作符:运算所需变量为两个的操作符;)
  2. %的操作数只能是整数,作用是取余数。
  3. %外其他都可以用于浮点数。

2.移位操作符

    <<左移操作符
    >>右移操作符

移位操作符移动的是二进制位
右移对于无符号类型强制补0,对于有符号类型续补符号位
用移位运算符不可以移动负数位,这是因为在C标准中没有这样的定义
移位规则:

  1. 左移:内存中左边的丢弃,右边补0
int n = 10;
n<<1;
//    |00000000000000000000000000001010|
//   0|00000000000000000000000000010100|

当n没有被赋值时是不会改变它的

  1. 右移:右移分两种

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 至左
* , / , % 自左向右
+ , - 自左向右
<< , >> 自左向右
<, <=, >, >= 自左向右
==, != 自左向右
& 自左向右
按位或 自左向右
&& 自左向右
逻辑或 自左向右
自左向右

以上就是全部总结了,水平有限,如果有遗漏或错误请指出,谢谢~

相关标签: 学习总结