C语言02--运算符

1.算术运算符

运算符

功能说明

举例

+

双目加法,一目取正

a+b . +a

-

双目减法,一目取负数

a-b . -a

*

双目乘法a*b

/

双目除法a/b

%

取余、求模

a%b

++

自加1

++a , a++

--

自减1

--a , a--

关注点:

    • 减号也是负号,比如 -a 是取变量 a 的相反数。
    • 取模运算要求左右两边操作数必须是整型数据。
    • 自加和自减运算不仅可以对整型操作,也可以对浮点数、指针操作。
  • 前缀自加自减运算:先进行自加自减,再参与表达式运算
  • 后缀自加自减运算:先参与表达式运算,在进行自加自减
    • 实际上++或--的操作实在调用一个自加自减的函数
    • 后缀自加函数返回的是该数据的值 (则当前值会被固定下来)
    • 前缀的自加函数返回的是该数据的地址 (则当前的值有可能会在后面的操作中被修改)
a = 10 ;
printf("%d , %d , %d , %d\n" , a++ , a++ , a++ , a++ );   //  13  12  11 10

a = 10 ;
printf("%d , %d , %d , %d\n" , ++a , ++a , ++a , ++a );  // 14  14  14  14  
注意: 在某些编辑器中++a可能是返回自加的值,则以上表达式的输出为:14  13  12  11 
有时候是返回地址的值,则表达式输出为:14 14 14 14 
#include <stdio.h>

int main(int argc, char const *argv[])
{

    char a = 3,b = 5;
    printf("%d %d %d %d %d \n",a,a++,++a,++a,a);
    return 0;
}
/**分析;输出为6 5 5 4 3 
 * a++自加函数先返回变量a的值再进行自加,
 * ++a自加函数先进行自加再返回变量a的值,
 * printf函数为从右向左入栈,从左向右输出。
 * 简单来说就是从右往左计算表达式,所以,
 * 这里printf先输出最右边的a变量,此时a为3
 * 接着进行最右边的++a,a自加为4,输出4
 * 接着进行中间的++a,a自加为5,输出5,
 * 接着进行最左边的a++,a先返回值,输出5,接着自加为6
 * 最后输出a,此时a为6
 * 
 * 注意:在一些编辑器++a是返回地址的值,
 * 则以上表达式输出为:6,5,6,6,6
 * 一些编辑器++a是返回自加的值,则以上表达式
 * 输出为:6,5,5,4,3
 */
 

分析:printf函数为从右向左入栈,从左往右输出,简单来说就是从右往左计算,从左往右输出

a++函数先返回a的值,再进行++, ++a函数先++,再返回a的值

2.关系运算符

关系运算符的表达式的值一定布尔型的,只有真或假两种。

运算符

举例

说明

>

a>b

判断a是否大于b

a

判断a是否小于b

==

a==b

判断是否等于需要用双等号

!=

a!=b

判断a是否不等于b

a

判断a是否小于或者等于b

>=

a>=b

判断a是否大于或者等于b

  • 关注点:
    • 关系运算符用于判断运算符两边的表达式是否满足给定的大小条件。
    • 由关系运算符组成的表达式称为关系表达式,其值为布尔型。
    • 判断是否相等是双等号==,而不是一个等号。

3.逻辑运算符

运算符

功能说明

举例

!

逻辑反

!(x==0)

&&

逻辑与

x>0 && x两边必须同时成立

||

逻辑或

y>100 || y两边有一个表达式为真即可

  • 运算规则:
    • 逻辑反:将逻辑真、假翻转,即真变假,假变真。
    • 逻辑与:将两个关系表达式串联起来,当且仅当左右两个表达式都为真时,结果为真。

    • 逻辑或:将两个关系表达式并联起来,当且仅当左右两个表达式都为假时,结果为假。

  • 特殊规则:
    • 在逻辑与运算中,如果左边表达式的值为假,那么右边表达式将不被执行。
    • 在逻辑或运算中,如果左边表达式的值为真,那么右边表达式将不被执行。

4.位运算符

位运算符,在运算的过程中是对所有的操作数进行按位的操作,比如a是一个int 整型数据,则对该整型的32位进行操作。

运算符

名称

举例

功能说明

~

位反(单目)

~a

将变量 a 中的每一位取反

1取反为0,0取反为1

&

位与(双目)

a & b

将变量 a 和 b 逐位进行与操作

有0得0

|

位或(双目)

a | b

将变量 a 和 b 逐位进行或操作

有1得1

^

位异或(双目)

a ^ b

将变量 a 和 b 逐位进行异或操作

相同得0 不同得1

<<

左移

a

将变量 a 中的每一位向左移动4位

将变量的每一位向左移动

>>

右移

a>>4

将变量 a 中的每一位向右移动4位

将变量的每一位向右移动

  • 位运算符操作的对象是数据中的每一位
  • 运算规则:
    • 位逻辑反、位逻辑与、位逻辑或拥有与逻辑运算相似的规则和一样的真值表
    • 异或运算:相同为0,不同为1
    • 移位运算:
      • 符号位不参与位移操作
      • 左移运算 :移出去的不要,空出来的补零。
      • 右移运算 :移出去的不要,空出来的补符号位。

5.特殊运算符

  • 赋值运算符

    • 不能对常量赋值,只能对变量赋值
    • 不能对数组赋值
    • 可以连续赋值,顺序从右到左
int a, b;
int x[5];

a = 100; // 对变量 a 赋值,正确
3 = 100; // 对常量 3 赋值,错误!
x = 123; // 对数组 b 赋值,错误!

// 连续赋值
a = b = 50; // 先将 50 赋给 b,再将 b 的值赋给 a,正确
int k = a = b = c = 60 ; // 由于c 没有被定义因此该语句有语法问题
  • 复合赋值符

    • 当赋值符号左右两边有相同的操作数时,采用复合赋值符不仅直观,且能提高运算效率
    • 除了下述10个复合运算符之外,生造别的复合运算符是非法的
// 加减乘除:
a += n; // 等价于 a = a+n;
a -= n; // 等价于 a = a-n;
a *= n; // 等价于 a = a*n; 
a /= n; // 等价于 a = a/n; 

// 求余:
a %= n; // 等价于 a = a%n;

// 位运算:
a &= n; // 等价于 a = a&n;
a |= n; // 等价于 a = a|n;
a ^= n; // 等价于 a = a^n;
a >>= n; // 等价于 a = a>>n;
a <<= n; // 等价于 a = a<<n;

条件运算符 (三目运算符)

  • 唯一需要三个操作数的运算符
  • 语法:表达式1 ? 表达式2 : 表达式3 ;
  • 释义:当表达式1为真时,取表达式2,否则取表达式3
  • 举例:
int a = 100;
int b = 200;
int m = (a>b) ? a : b;  // 如果 a>b 为真,则 m 取 a 的值,否则取 b 的值

sizeof 运算符

  • 含义:计算指定数据类型或者变量所占据内存的字节数
  • 语法:sizeof(类型) 、sizeof(变量) ,sizeof 变量 计算变量的字节数时圆括号可以省略
  • 举例:
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long double));

int a[5];
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);

return运算符

  • 含义:退出某个函数(如果退出的是主函数main,那么整个程序也就退出了)
  • 语法:必须出现在函数体内,可以带函数对应类型的数据
  • 举例:
int main()
{
    return 0 ;
}

6.优先级与结合性

  • 当表达式中出现不同的运算符时,根据优先级来决定谁先执行,比如先乘除,后加减
  • 当表达式中出现多个相同优先级的运算符时,根据结合性来决定谁先运行,比如从左到右

7.逗号表达式:

逗号表达式,是c语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。逗号表达式的语法如下:

expression1, expression2, ..., expressionN

其中,每个 expression 可以是任何类型的表达式,包括变量、常量、表达式等。

逗号表达式的作用是将多个表达式的值组合成一个值。例如,以下代码将两个整数相加并将结果存储在 sum 变量中:

int a = 10, b = 20;
int sum = a + b;

在这个例子中,逗号表达式 a, b 将两个整数 10 和 20 组合成一个表达式,然后使用 + 运算符将它们相加,并将结果存储在 sum 变量中。

逗号表达式也可以用于赋值语句中,例如:

int x = 10, y = 20;

这将创建两个整数变量 x 和 y,并将 10 和 20 分别赋给它们。

需要注意的是,逗号表达式在某些情况下不能使用,例如在声明变量时、在条件语句中使用时等。

示例:

int a = 1 ;
int b = 5 ;
int k = 6 ;
int f = 7 ;

//         6      1     5    a = 2 + 6 + 6 
int Num = (a+b , a++ , b++ , a+=b+k , ++a) ;
printf("%d\n" , Num) ;//输出15

8.结语:

        通过本篇博客,我们探讨了C语言中的各种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符以及赋值运算符等。每种运算符在编程中都扮演着不可或缺的角色,为我们提供了处理数据和执行计算的基本工具。

        理解运算符的概念和使用方法,是掌握C语言编程的基础。适当使用这些运算符,不仅能够提高代码的效率和可读性,还能帮助我们更好地实现算法和数据结构。

感谢您的阅读,如果您有任何问题或想法,欢迎在下方留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值