C语言中的操作符

C语言操作符

一、算术操作符 {+ , -  , *  ,/  , %}

(1)%操作符只能对整数取模,得出的结果是余数。

(2)/ 操作符,如果两个数都为整数则执行整数除法,只要有浮点数就执行浮点数除法。

      例:5/ 2 = 2 ; 5.0 / 2 = 2.5

(3)除%操作符以外,其它操作符都能作用于整数和浮点数。

二、移位操作符 {<< ,>>}

      其都为二进制移位,且都是对整数的操作。

   1、<<  左移操作符(左移一位除2)

        移位规则:左边丢弃,右边补0

       例:m=10   ——0000 1010——10

             m<<1   ——00010100——20  

   2、>> 右移操作符(右移移位 乘2)

        移位规则:(1)算术右移:右边丢弃,左边补符号位

                    (2)逻辑右移:右边丢弃,左边补0

三、位操作符 {& ,| ,^}

     操作数都必须是整数,且是针对二进制数操作的。

  1、& 按位与

     规则:有 0 为 0 ,全 1 为 1

  2、| 按位或

     规则:有 1 为 1 ,全 0 为 0

 3、^ 按位异或

     规则:相同为 1 ,不同为0

例:求一个整数在二进制中,1 的个数。

(1)  m&1 == 1     //确定最后一位有 1

(2)  m = m >> 1   //将最后一位移除

四、赋值操作符 { = }

可连续使用,从右到左依次执行,但不建议重复使用。

   复合赋值符

+=  -=  *=  /=  %=  >>=  <<= &=  |=  ^=

五、单目操作符

 !(逻辑反操作) -  +  &(取地址)sizeof  (操作数长度,以字节为单位)

注:(1)& 在这里不是位运算符,为取地址

         例:数组取地址;printf(“%p\n”, arr);   //取首地址

                                  Printf(“%p\n”, &arr);  //取整个数组的地址

(3)  sizeof 不是函数,是单目操作符,使用时可以不带(),但求int型必须带

例如:sizeofarr  //求整个数组所占字节的大小

         sizeof(1)//求整型数‘1’所占字节的大小

~ (按位取反)(以二进制补码运算)

++ (自增) (1)前置++:i++ 先使用,再加1

            (2)++后置:++I  先加1,再使用

-- (自减)  同上

* 间接访问操作符(解引用操作符)

   例:int num= 10;

         int*p = &num;

        *p= 20;

(类型)  (强制类型转换)

    例:int num=(int)3.14;   //num = 3

六、关系操作符

  > ,>= ,< ,<= ,!= ,==

七、逻辑操作符  (判断真假的操作符)

   (1)&& 逻辑与(只要前面为假,后面就不用算了)

   (2)|| 逻辑或  (只要前面为真,后面就不用算了)

例:int a=0, b=2, c=3, d=4;

      i=a++ && ++b && d++;   //a=1,b=2,c=3,d=4

      j=a++ || ++b || d++;       //a=1,b=3,c=3,d=4

    printf(“a=%d\n b=%d\n c=%d\n d=%d\n”, a, b, c, d);

八、条件操作符

  exp1 ?exp2 :exp3

如果exp1成立,执行exp2;不成立,执行 exp3

例:intmax=a>b ? a : b;

九、逗号表达式

  从前往后依次计算,输出结果为最后一个

  例:int a=2,b=3;

        int c =(a>b,a=b+10,a,b=a+1);//a>b,a=13,a=13,b=14

十、下标引用、函数调用、结构成员

(1)下标、引用操作符 {  []  }

     一个数组名 + 一个索引值,    但两边的意义处在同一水平线

     例: arr[4]  与  4[arr] 相同,但一般不提倡把索引值放在外面

(2)函数调用操作符 {()}

     接收一个或多个操作数:第一个操作数是函数名,剩余操作数是传递给函数的参数

(4)访问结构体指针

     结构体 . 成员名

     结构体指针 ->成员名

十一、表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定,但有些表达式的操作数在求值的过程中需要转换为其他类型。 

(1)隐式类型转换:C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。

(2)算术转换:如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的类型转换为另一个操作数的类型,否则操作就无法进行

(3)复杂表达式求值的三个影响因素:

    a. 操作符的优先级

b. 操作符的结合性

c. 是否控制求值顺序

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值