你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

【C语言精讲】——操作符的用法

2021/12/11 10:31:33

目录

一、算数操作符

二、移位操作符

2.1 左移操作符

2.2 右移操作符

 三、位操作符

四、赋值操作符

复合赋值符

五、单目操作符

六、关系操作符

七、逻辑操作符

八、条件操作符(三目操作符)

九、逗号表达式

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

操作符的优先级


一、算数操作符

     +     -     *     /     %

  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

二、移位操作符

<<   左移操作符

>>   右移操作符

移位操作符的操作数只能是整数。对于移位运算符,不要移动负数,这个是标准未定义的。

2.1 左移操作符

左边抛弃,右边补0

2.2 右移操作符

右移是算术还是逻辑移位,取决于编译器,常见的编译器都是算术右移

算术移位(右边丢弃,左边用原该值的符号位填充)

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

 三、位操作符

&     按位与(二进制位全1则为1,否则为0)

|      按位或(二进制位有1则为1,否则为0)

^     按位异或(相同为0,相异为1)

位操作符的操作数必须是整数,整数在内存中存储的是补码,位操作符是计算其补码

整数有3种二进制的表示形式(原码、反码、补码

  • 正整数  -  原码、反码、补码相同
  • 负整数  -  原码、反码、补码不同,要进行计算(原码的符号位不变,其他位按位取反得到的就是反码,反码的二进制+1就是补码)
  • 原码中一个字节(32bit)第一位为0表示整数,1表示负数
  • 打印或者使用时,用的是原码的值

习题

数字自己异或自己还是自己,0异或自己还是自己。如:3^3 = 3 ;   0^5 = 5

不能创建临时变量(第三个变量),实现两个数的交换

#include<stdio.h>
int main()
{
    int a = 3;
    int b = 5;
    printf("交换前:a=%d b=%d\n", a, b);

	a = a ^ b;
	b = a ^ b;	//a ^ b^b
	a = a ^ b;	//a ^ b^a
	printf("交换后:a=%d b=%d\n", a, b);

	return 0;
}

四、赋值操作符

=     直接给变量赋值

左值,是放在等号左边的,一般是一块空间(变量)

右值,是放在等号右边的,一般是一个值,或者一块空间的内容

复合赋值符

+=        -=        *=        /=        %=

>>=        <<=        &=        |=        ^=

复合赋值书写更加简洁,如:

int x = 0; 
x = x + 10; //正常赋值
x += 10;    //复合赋值

五、单目操作符

!                 逻辑反操作        //在if中改变真假

-                 负值

+                正值

&                取地址

sizeof         操作数的类型长度(以字节为单位)

~                二进制按位取反

--                前置、后置--        //前置是先--,后使用

++              前置、后置++        //后置是先使用,后++

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

(类型)         强制类型转换

对于加号(“+”)而言,如3+5,3是左操作数,5是右操作数,因此算术“+”号是一个双目操作符

六、关系操作符

>        >=        <        <=        !=        ==

七、逻辑操作符

&&     逻辑与        (左操作数为假,右边不算)

||        逻辑或        (左操作数为真,右边不算)

八、条件操作符(三目操作符)

exp1  ?  exp2 exp3        (exp1为真执行exp2,为假执行exp3)

九、逗号表达式

exp1exp2exp3, …expN

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

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

[ ]        下标引用操作符

int arr[10] = {0};

arr[7]  -->  *(arr+7)   -->  *(7+arr)  -->  7[arr]

( )        函数后面的括号为函数调用操作符

结构体变量.结构体成员

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

操作符的优先级

为了便于查看我单独整理了一个表格:点击 Here