C语言教程(六)运算符

1. 算术运算符

算术运算符用于算术运算,大致分为以下几种:

  • +:加法运算符
  • :减法运算符
  • *:乘法运算符
  • /:除法运算符
  • %:模运算符

这五个运算符都是二元运算符,就是有两个运算数才能完成运算,“+”和“-”也可以用作正负值,因此也作为一元运算符,一个运算数就可以完成运算。下面是算术运算符的示例:

/*+和-表示一元运算符,正负值*/
int a = +5;//表示正值,等同于int a = 5;可以省略
int b = -5;//表示负值

/*二元运算符*/
int c = 5 + a;//实现加法运算
int d = 5 - b;//实现减法运算
int e = a * b;//实现乘法运算
int f = a / 3;//实现除法运算,两个整数相除,得到的还是一个整数,小数部分会丢弃,得数是1
float g = 9.0 / a;//实现浮点数除法运算,两个运算数有一个是浮点数,会保留小数部分,得数是1.8
int h = 12 % a;//实现模运算,返回两个运算数的余值,这里得数是2,且不能用于浮点数
int i = 12 % -a;//结果为2
int j = -12 % a;//结果为-2,负值求模的结果的正负号由第一个运算数的符号决定

2. 自增、自减运算符

C语言提供了自增、自减运算符,也就是对变量自身加1、减1的操作。

  • ++:自增运算符
  • :自减运算符

自增、自减运算符按照所在的位置分为两种形式,得到的结果也是不一样的:

  • i++i–是先返回自增或自减操作前i的值,再对i自增或自减操作;
  • ++i–i是先对i自增或自减操作,再返回自增或自减之后i的值。
//i++,i--
int a = 5;
int b = a++;//a先赋值给b,再自加1
int c = b--;//b先赋值给c,再自减1
printf("a的值为%d\n",a);//结果为6
printf("b的值为%d\n",b);//结果为4
printf("c的值为%d\n",c);//结果为5

//++i,--i
int a = 5;
int b = ++a;//a先自加1,再赋值给b
int c = --b;//b先自减1,再赋值给c
printf("a的值为%d\n",a);//结果为6
printf("b的值为%d\n",b);//结果为5
printf("c的值为%d\n",c);//结果为5

3. 关系运算符

关系运算符主要用于比较两个值或表达式的关系,常用于控制语句(if/else语句),结果返回一个布尔值,1为真,0为假,主要分为以下6种:

  • >:大于运算符,判断左边的值是否大于右边的值
  • <:小于运算符,判断左边的值是否小于右边值
  • >=:大于等于运算符,判断左边的值是否大于或等于右边的值
  • <=:小于等于运算符,判断左边的值是否小于或等于右边的值
  • ==:相等运算符,判断两个值是否相等
  • !=:不相等运算符,判断两个值是否不相等
int a= 5;
int b = 10;
int c = 10;

if(a > b){  //返回false
   printf("a大于b");
}else{  //返回true
   printf("a小于b");
}
if(a < b){  //返回true
   printf("a小于b");
}else{  //返回false
   printf("a小于b");
}
if(a >= b){  //返回false
   printf("a大于或等于b");
}else{  //返回true
   printf("a小于或等于b");
}
if(a <= b){  //返回true
   printf("a小于或等于b");
}else{  //返回false
   printf("a大于或等于b");
}
if(b == c){  //返回true
   printf("b与c相等");
}else{  //返回false
   printf("b与c不相等");
}
if(a != b){  //返回true
   printf("a与b不相等");
}else{
   printf("a与b相等");
}

4. 逻辑运算符

逻辑运算符主要用于对两边的值或表达式逻辑判断,C语言提供了三种逻辑运算符:

  • &&:逻辑与运算符,两边的运算数都为真,则返回真,否则为假;
  • ||:逻辑或运算符,两边的运算数至少有一个为真,则返回真,否则为假;
  • !:逻辑非运算符,改变运算数的逻辑真假
int a = 5;
int b = 10;

if(a >= 5 && b <= 10){  //这里两个表达式都满足条件,所以返回真
   printf("返回真");
}else{
  printf("返回假");
}
if(a > 5 || b >= 10){  //这里a > 5为假,b >= 10为真,有一个为真则返回真
  printf("返回真");
}else{
  printf("返回假");
}
if(!(a > 5)){  //这里a > 5为假,使用!运算符改变为真;这里!的优先级比>运算符高,所以要加上括号
  printf("返回真");
}

逻辑运算符的执行顺序是,先计算左边的表达式,后计算右边的表达式。在某些情况下,如果左边的表达式符合条件,只判断左边的表达式就可以得到结果,就不会再对右边的表达式计算了,这就是“短路”:

if(condition1 && condition2)  
if(condition1 || condition2)  

第一个短路与&&运算符,condition1为假,那就直接返回假,没有必要对condition2计算了

第二个短路与||运算符,condition1为真,那就直接返回真,也没有必要对condition2计算了

5. 位运算符

位运算符用来操作二进制位(bit),C语言提供了6种位运算符:

  • &:按位与运算符
  • |:按位或运算符
  • ^:按位异或运算符
  • ~:按位取反运算符
  • <<:左移运算符
  • >>:右移运算符

与运算符&,对两个操作数的每一个二进制位进行逐位比较,如果两个二进制位都为1,则返回1,否则返回0。

int a = 5;//101
int b = 7;//111

a = a & b;//简写为a &= b;
printf("a的值为%d\n",a);//返回5,即二进制101

或运算符|,对两个操作数的每一个二进制位进行逐位比较,如果两个二进制位至少有一个为1,则返回1,否则返回0。

int a = 5;//101
int b = 7;//111

a = a | b;//简写为a |= b;
printf("a的值为%d\n",a);//返回7,即二进制111

异或运算符^,对两个操作数的每一个二进制位进行逐位比较,如果两个二进制位相同,则返回0,否则返回1。

int a = 5;//101
int b = 7;//111

a = a ^ b;//简写为a ^= b;
printf("a的值为%d\n",a);//返回2,即二进制10

取反运算符~,对运算数的每一个二进制位取反,即1变0,0变1,返回一个新的值。

int a = 5;//101
a = ~a;//按位取反
printf("a的值为%d\n",a);//返回-6

左移运算符<<,将运算数的每一个二进制位向左移动指定的位数,左移相当于乘法操作,左移n位就相当于运算数乘以2的n次方,左边的二进制位舍弃,右边补0。

int a = 12;
a = a << 2;//简写为a <<= 2,相当于12乘以2的2次方
printf("a的值为%d\n",a);//返回48

右移运算符>>,将运算数的每一个二进制位向右移动指定的位数,右移相当于除法操作,右移n位就相当于运算数除以2的n次方,正数左边补0,负数左边补1,右边舍弃。

int a = 12;
a = a >> 2;//简写为a >>= 2,相当于12除以2的2次方
printf("a的值为%d\n",a);//返回3

6. 赋值运算符

赋值运算符用于对变量的赋值,赋值运算符以“=”表示,“=”的左边是变量,称为左值或左值表达式,也可以出现在“=”的右边;“=”的右边是具体的值或表达式语句,称为右值,右值是不能被赋值且不能出现在“=”的左边。赋值运算符可以和算术运算符结合起来组成新的运算符,大致分为以下几种:

  • =:基本赋值运算符,将右边的运算数赋给左边的运算数
  • +=:加法和赋值结合的简写形式,a += b相当于a = a + b
  • -=:减法和赋值结合的简写形式,a -= b相当于a = a – b
  • *=:乘法和赋值结合的简写形式,a *= b相当于a = a * b
  • /=:除法和赋值结合的简写形式,a /= b相当于a = a / b
  • %=:模运算和赋值结合的简写形式,a %= b相当于a = a % b
  • <<=:左移和赋值结合的简写形式,a <<= b相当于a = a << b
  • >>=:右移和赋值结合的简写形式,a >>= b相当于a = a >> b
  • &=:按位与和赋值结合的简写形式,a &= b相当于a = a & b
  • |=:按位或和赋值结合的简写形式,a |= b相当于a = a | b
  • ^=:按位异或和赋值结合的简写形式,a ^= b相当于a = a ^ b

7. 三目运算符

三目运算符是指有三个运算数,也称为条件表达式,基本表现形式是:condition ? a : b;

int a = 5;
int b;
b = (a == 5) ? 10 : 20;
printf("a的值为%d\n",a);//返回10

8. 运算符优先级

运算符的优先级是指在一个表达式中包含多个运算符,哪个运算符应当优先执行,这通常会影响到一个表达式的结果,相当于是对运算符进行排序,下面是运算符的优先级排序(由高到低排序):

  • 一级:小括号( )
  • 二级:从右往左:负号运算符-、按位取反~、自增运算符++、自减运算符–、逻辑非!、sizeof()
  • 三级:乘法*、除法/、%模运算
  • 四级:加法+、减法-
  • 五级:左移<<、右移>>
  • 六级:关系运算符(>、<、=等)
  • 七级:位运算符(&、|、^)
  • 八级:逻辑运算符(&&、||)
  • 九级:从右至左:三目运算符
  • 十级:从右至左:赋值运算符
  • 十一级:逗号运算符,用于表达式

有错误的地方、需要补充的知识欢迎评论区指正

觉得有帮助可以赞赏本文哦~万分感谢!
文章:C语言教程(六)运算符
作者:沛旗
链接:https://www.peiqiblog.com/article/876/
版权声明::本博客站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0协议
转载请注明文章地址及作者哦~
暂无评论

发送评论(禁止发表一切违反法律法规的敏感言论) 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇