运算符大全

在第三章里已经提到了C语言中的数据类型和对应的常量与变量,这是C语言中的两种最基本的数据对象。在使用一个变量前,需要对变量先进行声明,甚至还需要对变量赋一个初值,比如下面的语句就声明了2个整型变量:

int a;

int b = 100;

上面两条C语言语句,第一句声明了一个整型变量a,但是没有给a赋初值,所以这个时候a的值是一个任何可能的值,是随机的,也叫垃圾值;第二句声明了一个整型变量b,并且在声明的同时还给b设置了一个初始值100。在完成了对变量ab的声明之后,就可以在程序中按照ab的作用域来使用它了。

有了变量和常量来存放和表现数据,然而还缺少对这些数据的处理或者运算的能力。因此C语言提供了一系列的运算符,运算符就是用于指定对特定类型的变量与常量要进行的操作,在运算符中被操作的这样的变量或者常量叫做操作数。只有一个操作数的运算符叫单目运算符,只有2个操作数的叫双目运算符,有3个操作数的叫三目运算符。

 

运算符

结合律

() [] -> .

从左到右

! ~ ++ -- +(正号) -(负号) *(指针取值符) (type) sizeof &

从右到左

* / %

从左到右

+ -

从左到右

<<   >>

从左到右

< <= >   >=

从左到右

== !=

从左到右

&

从左往右

^

从左往右

|

从左往右

&&

从左往右

||

从左往右

?:

从右往左

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

从右往左

,

从右往左

    下面来逐一的介绍每一个C语言操作符的使用方法。注意:由于某些操作符和后面的C语言知识息息相关,比如位运算操作符,所以目前大家可能对它还比较陌生,但没有关系,等具备了更多的相关知识,再来学习,就问题不大了。

():扩号运算符

 

int a = 2;

int b = 1;

int c = 10;

(a+b)*c;

 

printf(“hello world”);

 

[]:数组下标运算符

int a[10] = {0};

a[0] = 10;

->:成员选择运算符(左边一般为结构体指针)

.:成员选择运算符(左边一般为结构体变量)

参考第十章,结构体中会详细介绍。

 

单目运算符:

!:逻辑非运算符,将真值变为假值,将假值变为真值。

int a = 10;

if (!(a==0))//if中的表达式的值为true

{

}

~:按位取反运算符

int a = 10;

~a;

参考第十二章位运算中详细介绍。

++:自增运算符

int a = 10;

a++;

int b = a++;

int c = ++a;

注意a++++a的区别:

如果单独如下写:

a++;

++a;

没有任何区别。

但是如果是在其它场景下,比如:

int b = a++;//此时相当于:b=a;a = a+1;

int c = ++a;//此时相当于:a=a+1;c=a;

这个时候a++是先取a的值,再对a1++a是先对a1,再取a的值。

 

--:自减运算符

int a = 10;

a--;

int b = a--;

int c = --a;

a——a的区别与a++++a类似。

 

+:正号运算符

-:负号运算符

int a=10;

int b = -a;

 

*:取值运算符

&:取址运算符

   参见第八章指针中会详细介绍。

 

(type):强制类型转换运算符

int a = 10;

       float f=(float)a;

 

sizeof:长度运算符

int a = 10;

int length = sizeof(a);

int len = sizeof(int);

 

算术运算符:

*:乘法运算符

int a = 10;

a = a*10;

 

/:除法运算符

int a = 10;

int b = a/3;

int c = a/5;

 

%:取余运算符

int a = 10;

int b = a%5;

int c = a%3;

 

+:加法运算符

int a = 10;

int b = 20;

int c = a + b;

 

-:减法运算符

int a = 10;

int b = 5;

int c = a – 5;

 

 

<<:左移运算符

>>:右移运算符

参见十二章位运算会详细介绍

 

比较运算符:

<:小于运算符

<= :小于等于运算符

>:大于运算符

>=:大于等于运算符

==:等于运算符

!=:不等于运算符

int a = 10;

int b = 20;

 

if (a > b)

{

}

if (a >= b)

{

}

 

if (a < b)

{

}

if (a <=b )

{

}

if (a != b)

{

}

if (a==b)

{

}

 

    在数学里类似的表达式a<b<c,在程序设计语言里不能这样写,而应该写成:

a<b &&b<c

而在数学的等于(=)符号,在程序里必须用==。这是一个初学者经常犯下的错误,即很容易把==写成=。看下面的程序:

int a = 0;

if (a == 1)

{

}

else

{

}

由于a不等于1,所以上面的程序将执行else分支里的语句。但是,假如由于错误的把==写成了=,则变成了:

int a = 0;

if (a = 1)

{

}

else

{

}

这个时候,整个表达式的值就是a的值,而a已经被赋值为1,所以,if(a=1)为真,那么就应该执行if分支里的语句,而永远不会执行else分支的值了。

要避免这个错误的发生,一个推荐的方法是把常量写在==左边,而变量写在==的右边。这样以来,程序在编译的时候,就会被编译器捕获错误,因为一旦把==写成了=,你不可能给常量赋值。比如:

1==a

不小心写成了

1=a

编译器一看就知道错误发生了。1是常量,不可能被赋值。

 

&:按位与运算符

^:异或运算符

|:按位或运算符

 

位运算&,^,|的具体计算参见十二章位运算会详细介绍。

 

逻辑运算符:

&&:逻辑与运算符

||:逻辑或运算符

 

int a = 10;

int b = 20;

 

if (a>b && a>0)

{

}

 

if (a<b || b > 0)

{

 

}

 

&&运算符中,比如:a&&b&&c,假如计算出左边的某个值为假,那么就没有必要计算后面的表达式了。比如,假如a为真,那么继续计算b的值,如果b为真,那么就计算c的值,如果abc都为真,那么整个表达式就为真。而一旦a为假,那么就不用计算b c了,整个表达式就为假。

 

||运算符中,比如:a || b ||c,假如计算出左边的某个值为真,那么就没有必要计算后面的表达式了。比如假如a为假,那么继续计算b的值,假如b 为假,那么就计算c的值,如果abc都为假,那么整个表达式的值就为假。而一旦a为真,那么就不用计算bc的值了,整个表达式就为真。

 

比如上面的表达式:a>b && a >0,由于a值为10b的值为20 a大于b 为假,所以根本就不用结算a>0了,整个表达式必为假。而对于表达式a<b || b>0,由于a大于b为真,所以,根本就不用计算b>0的值,整个表达式的值就为真。

 

?::三元运算符

三元运算符A?B:C,在计算的时候,先计算A部分的值,如果A部分位真,就计算B部分的值作为整个表达式的值,否则计算C部分表达式的值,作为整个表达式的值。

 

2个数最大值:

int a = 10;

int b = 20;

a>     b?a:b;

判断一年是否为润年:

year%(year%100?400:4)?1:0

 

 

=:赋值运算符

int a = 10;

int b = a;

 

复合运算符:

+=

-=

*=

/=

%=

&=

^=

例子:

int a = 10;

a += 10;//等价于a = a+10;

a *= 10;// 等价于a = a*10;

a -= 10;// 等价于a = a -10;

a /= 10;// 等价于a = a / 10;

a %= 10;// 等价于a = a %10;

a &= 10;// 等价于a = a&10;

a ^= 10;// 等价于a = a^10;

a |= 10;// 等价于a = a | 10;

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注