C语言操作符详解(一)

简介: 本文将介绍C语言中常用的操作符及其用法,并有大量图解供大家参考和学习,非常详细

一、基础篇

1.算数操作符

+   -   *   /   %   +=   -=  *=  /=  这些操作符是我们编程时候最常用的几个算数操作符

+ - * 等算数操作符就不用再多说了,与正常的数学用法相同,下面是一些常用但是初学者可能不太容易把握、易错的算数操作符

(1)/ 操作符

/:除法,除法在C语言中分为整数除法和浮点数除法

整数除法:/d的两个操作数都为整数,计算方法是向下取整

得到的结果为

浮点数除法:储存值的变量必须是浮点数, 两个操作数中至少有一个为浮点数,但除数或者被数不一定要用浮点数存储,只需要在计算时进行转化即可

%.nlf也可以使结果自动四舍五入保留n位小数

(2)%取余操作符

取余运算符得到的是余数,但取余操作符的两个操作数都要为整数

c的值就等于8除以3的余数 2

(3) +=  -=  *=  /=操作符

直接举例子:

a+=2就等同于a=a+2,将a的值加2再赋值给a

a-=2就等同于a=a-2,将a的值减2再赋值给a

*=、/=也是相同的道理

2.单目操作符

单目操作符,顾名思义,单目,就是操作数只有一个的操作符

(1)!  操作符

! 逻辑反操作,将真变为假,将假变为真

在逻辑定义中,0表示假,非0则表示真

在这段代码中,先给i赋初值0,然后在while判断是否进入循环时,!0就是真,进入循环,但为了防止死循环,我们加上一个限制条件,保证只打印5次

同样,如果while判断条件只有一个0时,则说明为假,不进入循环,打印0次

(2)sizeof 操作符

sizeof(类型名);sizeof()返回无符号的所计算的对象或者类型所占空间的大小,单位是字节

sizeof经常也用来计算数组元素的个数

(3)~操作符

~:按位取反操作符,对二进制位进行按位取反,将二进制补码每一位的0变1,1变0。注意,是对补码进行操作,负数要先将原码变为补码,同时取反得到的也是补码,看结果还得再变为原码

从图中可以看出,0在按位取反后应该是  -1,同样,在编译器上验证

(4)++、--操作符

前置++,前置--:先将变量+1或者-1,再作为表达式的值使用(先++,再使用)

后置++,后置--:先将变量的值作为表达式使用,再将变量+1或者-1(先使用,再++)

用上面的口诀想起来就容易多了

(5)&  取地址操作符

&:取出某个变量、数组、函数等的地址,在比价复杂的代码中,我们经常用指针进行操作,&操作符就可以取出地址赋值给指针变量

(6)*  间接访问操作符

间接访问操作符,也称解引用操作符,操作数地址或指针,可以通过对地址的解引用,找到地址中存储的变量,对变量进行间接操作

(7)()强制类型转化

():将一种数据类型的变量强制转化为另一种数据类型

如参数需要一个无符号的整形变量,而你目前所有的是一个整形变量啊,就可以通过强制类型转化转化为组符号的整形,这个经常用于函数参数的优化部分

如:(unsigned int)a   即可将a转化为无符号的整形,同样,强制类型转化尽量要遵守由低到高转化,否则,也会丢失精度

3.逻辑操作符

&& 逻辑与 操作符:“同时都要满足”

||    逻辑或 操作符:“满足其中一个即可”

1&&2---->1       0&&1----->0  

1||2   ---->1       0||1----->1

1表示真,0表示假

例:找出1000---2000之间的闰年

闰年:如果year能够被4整除,并且不能被100整除,则year是闰年。或者如果year能够被400整除,则year是闰年,判断闰年就恰好用到了这两个操作符

int year = 0;
  for (year = 1000; year < 2000; year++)
  {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
      //判断闰年
      printf("%d ", year);
  }

逻辑操作符这里有一个超级易错点

对于&&来说,如果表达式左边为0,则说明在逻辑上已经为了,那么右边全部的表达就不再进行计算,也不执行。

int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);

a++;---->是先将a的值使用,在对a加1。刚使用的表达式a的值为0,并且在&&的左边,所以后面++b,d++不再计算。
同样,对于||来说,如果表达式左边为非0则说明在逻辑上已经为了,那么右边全部的表达就不再进行计算,也不执行。

int i = 0, a = 0, b = 2, c = 3, d = 4;
  i = a++||++b||d++;
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);

a++这个表达式的值为0,继续执行,但是++b的值为3,在||操作符的左边,并且在逻辑上已经为真了,所以后面的d++不再计算

4.条件操作符

条件操作符是C语言中唯一一个三目操作符

表达式1如果为真,即计算表达式2,同时表达式2的结果就是三目操作符的运算结果

表达式2如果为假,即计算表达式3,同时表达式3的结果就是三木操作符的运算结果

也可以在编译器里面运行来验证

int a = 0, b= 3, max1 = 0,max2;
  if (b > a)
    max1 = b;
  else
    max1 = a;
  //等同于
  max2 = (b > a) ? b : a;
  printf("%d %d", max1, max2);

运算结果当然是max1=3  max2=3

5.逗号表达式逗号表达式

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


int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1)

从左向右一次算a=b+10=12 ; b=a+1=13;然后将这个逗号表达式整体的值(即b=a+1)赋给变量c

即 c=13;

需要注意的是逗号表达式的每一个表达式都必须从左向右依次计算

6.下标引用,函数调用和结构体成员访问

(1)下标引用操作符[]

arr[2]=2;//将2赋值给arr[2]

[ ]就是下标引用操作符,arr和2是[ ]的两个操作数,arr为数组名,2为索引值

(2)函数调用操作符()

()可以接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数,函数传参可以传多个参数

(3)结构体访问操作符.->

用法:

结构体变量.结构体成员

结构体指针变量->结构体成员

#include <stdio.h>
struct Stu
{
 char name[10];
 int age;
 char sex[5];
 double score;
};
void set_age1(struct Stu stu)
{
 stu.age = 18;//结构体变量访问结构体成员
}
void set_age2(struct Stu* pStu)
{
 pStu->age = 18;//结构体指针变量访问结构体成员
}
int main()
{
 struct Stu stu;
 struct Stu* pStu = &stu; 
 stu.age = 20;//结构成员访问
 set_age1(stu);
 pStu->age = 20;//结构成员访问
 set_age2(pStu);
 return 0;
}

7.关系操作符

>

>=

<

<=

== 用于测试“相等”

!= 用于测试“不相等”

相关文章
|
14天前
|
存储 网络协议 C语言
【C语言】位操作符详解 - 《开心消消乐》
位操作符用于在位级别上进行操作。C语言提供了一组位操作符,允许你直接操作整数类型的二进制表示。这些操作符可以有效地处理标志、掩码、位字段等低级编程任务。
60 8
|
14天前
|
C语言
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
56 7
|
4月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
81 0
|
4月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
287 0
|
2月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
45 10
|
2月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
176 1
|
2月前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
185 0
|
4月前
|
C语言
C语言操作符(补充+面试)
C语言操作符(补充+面试)
46 6
|
4月前
|
存储 编译器 C语言
十一:《初学C语言》— 操作符详解(上)
【8月更文挑战第12天】本篇文章讲解了二进制与非二进制的转换;原码反码和补码;移位操作符及位操作符,并附上多个教学代码及代码练习示例
62 0
十一:《初学C语言》—  操作符详解(上)
|
5月前
|
C语言
五:《初学C语言》— 操作符
本篇文章主要讲解了关系操作符和逻辑操作符并附上了多个代码示例
45 1
五:《初学C语言》—  操作符