操作符整理及其优先级

    操作符主要有十大类,以下是我自己对于操作符的一些简单总结,可能会有所出入,但也有一定的意义。如果有误,烦请各位大佬指点一二。当然也希望这些总结能够对你们有所帮助。

一 操作符总结

1:算数操作符(+    -   *   /  %)

+ : 操作数的类型:整型、浮点型。作用与数学中的“加”作用相同。

-  : 操作数的类型:整型、浮点型。作用与数学中的“减”作用相同。

*  : 操作数的类型:整型、浮点型。作用与数学中的“乘”作用相同。

/  : 操作数的类型:整型、浮点型。作用与数学中的“除”作用相同。只要操作数中有一个是浮点型,执行的就是        浮点数除法。

% : 操作符的类型:整型。作用是求余。

2:移位操作符 (<<  >>)

左移(<<): 移位规则:左边抛弃、右边补0。

     (1) 移位操作符是对二进制数的补码进行操作。(正数的补码与源码保持一致)

         例如:int num = 2;(该数操作的对象是00000000000000000000000000000010

                   num <<1; (该语句执行后的结果为00000000000000000000000000000100,即十进制数4)

     (2) 移位数不能是负数位。(移位操作数可为正为负;左移、右移都符合

        例如: num <<-1;   (该语句错误。)

      (3) 在没被赋值的情况下,自身的值不会变。(左移、右移都符合)

        例如: int num = 2;

                  int  b = num <<1;(该语句执行后num的值仍旧是2;但是b的值是4)

右移(>>):  右移主要分两种,一种是逻辑移位,另一种是算数移位。采取哪种移位规则主要取决于编译器,               常见的编译器采用算数移位。

       (1)逻辑右移:移位规则:左边用0填充,右边丢弃

          例如:int num = -1;

                     num >>1;

具体操作: -1的源码为10000000000000000000000000000001;(标红的为符号位:正数最高位为0;负数位1.)

                  -1的补码为11111111111111111111111111111110;

逻辑右移一位的结果为:01111111111111111111111111111111

右移一位后的源码为:00000000000000000000000000000001;

     (2)算数右移: 移位规则:左边用原该值的符号位填充,右边丢弃。

        例如:int num = -1;

                     num >>1;

具体操作: -1的源码为10000000000000000000000000000001;(标红的为符号位:正数最高位为0;负数位1.)

                  -1的补码为11111111111111111111111111111110;

逻辑右移一位的结果为:11111111111111111111111111111111

右移一位后的源码为:10000000000000000000000000000001;

3:位操作符 (按位与&、按位或|、按位异或^)

位操作符的操作数必须是整数,且以补码形式进行存储运算。

(1)按位与&:有0则为0。

  例如:

                

(2)按位或|:有1则为1。

  例如:

           

(3)按位异或:相同则为0。

  例如:

           


4:赋值操作符(=、+=、*=、/=、%=、>>=、<<=、&=、|=、^=)

赋值(=):重新赋值可以得到一个自己满意的值。可以连续赋值,但是一般不提倡用。若连续赋值,从右向左依次赋值。

复合赋值符:+=:(其他运算符一样的道理)

例如:int x = 0;

         x = x +10;

等价于: x+=10;

5:单目操作符(非!、负值-、正值+、取地址&、取反~、前置后置--、前置后置++、解引用*、强制类型转换( 类型)、操作数的类型长度sizeof)

(1)非!:相当于“不”。一般用于判断。非0得1、非1则0、非假即真,非真即假。

例如:if(p!=NULL)判断指针是否为空指针。

         如果i%j==2,则!(i%j)的值为0.

(2)正值+、负值- : 与数学中的“正、负”号相同。

例如:a+(-b)与a-b相同。

(3)取地址& : 右操作对象的地址。常与指针搭配使用。

例如: printf("%p\n",&a);   打印a的地址。

(4)取反~ : 15取反结果为-16。

例如: #include<stdio.h>

         int main()

            {

                int a = 15;

                printf("%d",~a);

             }

输出结果为-16。

(5)前置后置--、前置后置++  自加自减运算符。前置++、--先自增或自减再执行运算;后置++、--先执行运算再自增或自减。

例如: 已知i的原值等于3.

   j = ++i;

printf(“%d”,++i);        输出结果为4.

   j = i++;

printf(“%d”,i++);      输出结果为3.

(6) 解引用* : 操作数必须是指针类型。其作用是对其得到的操作数所指变量的引用。

例如:

(7) 强制类型转换( 类型):可以将一个表达式转换成所需类型。一般形式为(类型名)(表达式)

注意:表达式应该用括号括起来。

例如:  (int)(x+y)     将x+y的值转换成int型。

          (int)x+y       将x转换成int型,再与y相加。

      (float)(5%3)     将5%3的值转换成float型。

(8)操作数的类型长度sizeof : 计算对象所占的字节个数,通常用来查看变量或结构体等所占的字节个数。


printf(“%d”,sizeof arr/sizeof arr[0]);   求的结果是计算数组元素的个数。

6:关系操作符(<、>、<=、>=、!=、==)

关系运算符与数学中的运算符相同。

注意:不要将赋值运算符=与关系运算符中的等于==写错。

7:逻辑操作符(&&、||)

&& :有0则为0.

操作数A操作数B结果
000
010
100
111

|| : 有1则为1.

操作数A操作数B结果
000
011
101
111

8:条件操作符(?:)

条件操作符由两个符号(?和:)组成,必须一起使用。要求有三个操作对象。它是C语言中唯一的一个三目运算符。       一般形式为    表达式1?表达式2:表达式3

例如:


9:逗号表达式( , )

逗号表达式,就是用逗号隔开的表达式。一般形式为:表达式1,表达式2,表达式3,······表达式n  从左向右依次执行,整个表达式结果是最后一个表达式的结果。

例如: 


10:下标引用、函数调用和结构成员([ ]、()、.)

  (1)    [ ]  操作数要求:一个数组名+一个索引名

例如:arr[9] = 10;    [ ]的两个操作数是arr和9.

(2)()操作数的个数不限制。可以是一个,也可以多个。第一个操作数是函数名,剩余的操作数是传递给函数的参数。

例如:


(3)  .   访问一个结构的成员

两种格式:  . 结构体 . 成员名

                ->结构体指针 ->成员名

二 操作符的优先级顺序

1 圆括号,下标运算符

2 非、按位取反、自增自减、负号、类型转换、指针、取地址、计算字节长度

3 乘、除、取余

4 加、减

5 左移、右移

6 大于 、小于、大于等于、小于等于

7 等于、不等于

8 按位与&

9 按位异或^

10 按位或|

11 逻辑与&&

12 逻辑或||

13 条件运算符(? :)

14 赋值运算符

15 逗号表达式

(优先级由高到低)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值