C语言的运算符(一眼详解)

发布时间:2024年01月09日

目录

?运算符的优先顺序表?

?C语言的运算符:

一.算术运算符

二.移位运算符

三.位操作符

四.赋值运算符?

五.单目运算符(一元运算符)与

三目运算符

4.? 条件运算符【唯一一个三目运算符】

5.sizeof

六、逗号运算符


?运算符的优先顺序表?


?C语言的运算符:

算数运算符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符 、逗号表达式等


一.算术运算符

+(加)? ?-(减)? ? ?*(乘)? ? ? /(除以)? ? ? %(取余)

在 printf 中,% 是格式控制符的开头,是一个特殊的字符,不能直接输出;要想输出 %,必须在它的前面再加一个 %,这个时候 % 就变成了普通的字符,而不是用来表示格式控制符了。

1.%的左右操作数必须都为整数

另外,余数可以是正数也可以是负数,由 % 左边的整数决定:

  • 如果 % 左边是正数,那么余数也是正数;
  • 如果 % 左边是负数,那么余数也是负数。
#include <stdio.h>
int main()
{
    printf(
        "100%%12=%d \n100%%-12=%d \n-100%%12=%d \n-100%%-12=%d \n",
        100%12, 100%-12, -100%12, -100%-12
    );
    return 0;
}
//运行结果:
  100%12=4
  100%-12=4
 -100%12=-4
 -100%-12=-4 
 //注意若要打出一个% 要写%%而不是%

?2.? +、-、*、/? ? ? ?如果操作符的两个操作数其中一个操作数是小数,则执行小数运算,如果都为整数,则进行整数运算。


二.移位运算符

<<是向左移位? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>>是向右移位

左移操作符移位规则:左边抛弃、右边补零

右移操作符移位规则:右边抛弃,左边用该值的原符号位填充、、、如果是整数,符号位为0,则左面填充0,如果为负数,符号位为1,则左面填充1

所有被操作的数以二进制进行


三.位操作符

?&(按位与) |(按位或) ^(按位异或)?(这些操作符的操作数必须为整数)

?按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。

按位或运算符“|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1,相同时为0。参与运算数仍以补码出现。

?


四.赋值运算符?

基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。

还有一些复合运算符? ? 0x代表十六进制的前缀


五.单目运算符(一元运算符)与

三目运算符

**1.+ 需要两个操作数,所以它不是一元运算符,而是二元运算符,而后者只需要一个操作数,所以 ++ 为一元运算符。

**2.自增自减的结果必须得有变量来接收,所以自增自减只能针对变量,不能针对数字,例如10++就是错误的。

***3.++ 在前面叫做前自增(例如 ++a)。前自增:先进行自增运算,再进行其他操作。

? ?++ 在后面叫做后自增(例如 a++)。后自增:先进行其他操作,再进行自增运算。 自减(--)也一样,有前自减和后自减之分。

include <stdio.h>
int main()
{
    int a = 10, b = 20, c = 30, d = 40;
    int a1 = ++a, b1 = b++, c1 = --c, d1 = d--;
    printf("a=%d, a1=%d\n", a, a1);
    printf("b=%d, b1=%d\n", b, b1);
    printf("c=%d, c1=%d\n", c, c1);
    printf("d=%d, d1=%d\n", d, d1);
   
    return 0;
}
/*输出结果:
a=11, a1=11
b=21, b1=20
c=29, c1=29
d=39, d1=40*/

4.? 条件运算符【唯一一个三目运算符】

表达式为:表达式1?表达式2:表达式3

先求解表达式1,

若其值为真(非0)则将表达式2的值作为整个表达式的取值,

否则(表达式1的值为0)将表达式3的值作为整个表达式的取值

条件运算符具有右结合性

例如:w < x ? x + w : x < y ? x : y

与 w < x ? x + w : ( x < y ? x : y) 等价

与 (w < x ? x + w : x < y) ? x : y 不等价

5.sizeof

在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。

sizeof计算对象的大小也是转换成对对象类型的计算


sizeof(2);//2的类型为int,所以等价于sizeof(int);
sizeof(2+3.14);//3.14的类型为double,2也会被提升成double类型,所以等价于sizeof(double);

六、逗号运算符

exp1, exp2, exp3, …expN

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

文章来源:https://blog.csdn.net/idashuju/article/details/135425424
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。