操作符详解

文章目录

  1. 操作符分类
  2. 算术操作符
  3. 移位操作符
  4. 位操作符
  5. 赋值操作符
  6. 单目操作符
  7. 关系操作符
  8. 逻辑操作符

文章内容

1.操作符分类

算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员

2.算术操作符

     +    -    *    /    %

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

 除法

    1.整数除法(除号的两端都是整数)

     2.浮点数除法(除号的两端只要有一个小数就执行小数除法)

3.移位操作符 

<< 左移操作符
>> 右移操作符
 
注:移位操作符的操作数只能是整数。

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

3.2 右移操作符
移位规则:
首先右移运算分两种:

    1. 逻辑移位
 左边用0填充,右边丢弃
     2. 算术移位
 左边用原该值的符号位填充,右边丢弃

警告⚠ :
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

int num = 10;
num>>-1;//error

4.位操作符

位操作符有:

  & //按位与
  | //按位或
  ^ //按位异或
  注:他们的操作数必须是整数。 

练习一下:

#include <stdio.h>
int main()
{
int num1 = 1;
int num2 = 2;
num1 & num2;
num1 | num2;
num1 ^ num2;
return 0;
}

  一道变态的面试题:
     不能创建临时变量(第三个变量),实现两个数的交换。(按位异或支持交换律 即a^a^b == a^b^a) 

#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}

5.赋值操作符 

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

复合赋值符

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

这些运算符都可以写成复合的效果。比如:

int x = 10;
x = x+10;
x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁。

6.单目操作符 

6.1 单目操作符介绍(单目操作符只有一个操作数)

  !      逻辑反操作
  -      负值
  +      正值
  &      取地址
  sizeof    操作数的类型长度(以字节为单位)
  ~      对一个数的二进制按位取反
  --      前置、后置--
  ++      前置、后置++
  *      间接访问操作符(解引用操作符)

  (&  * )应用于指针
 (类型)    强制类型转换

 关于sizeof其实我们之前已经见过了,可以求变量(类型)所占空间的大小。

7.关系操作符 

关系操作符

 >
 >=
 <
 <=
 !=  用于测试“不相等”
 ==    用于测试“相等”

这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。
警告:
在编程的过程中== 和=不小心写错,导致的错误。

注意:

        在C语言中,关系操作符(如 ==!=<<=>>=)有返回值,但这个返回值不是传统意义上的“返回给某个变量”的值,而是直接作为表达式的结果。这些操作符用于比较两个操作数,并根据比较的结果返回布尔值(在C语言中,这通常是通过返回整数 1(真)或 0(假)来实现的,尽管C语言标准本身并不直接支持布尔类型,但<stdbool.h>头文件提供了booltruefalse的定义,这些在C99及之后的版本中是可选的)。

        然而,在C语言的实际使用中,你通常会看到这些关系操作符被用在条件语句(如if语句)或循环语句(如whilefor循环)中,以及作为逻辑操作符(如&&||!)的操作数。在这些情况下,你并不直接“接收”这些操作符的返回值,而是根据它们的返回值来决定程序的流程。

8.逻辑操作符

逻辑操作符有哪些:

  &&   逻辑与
  ||      逻辑或

区分逻辑与和按位与
区分逻辑或和按位或

1&2----->0
1&&2---->1
1|2----->3
1||2---->1

逻辑与和或的特点:

#include <stdio.h>
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
  i = a++ && ++b && d++;  //   &&左边为假 , 右边不再计算
  //i = a++||++b||d++; //  ||这个左边为真,右边不再计算
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值