C语言基础知识-运算符与表达式

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.常用运算符分类

1>.算术运算符

    用于处理四则运算。

2>.赋值运算符

    用于将表达式的值赋给变量。

3>.比较运算符

    用于表达式的比较,并返回一个真值或假值。

4>.逻辑运算符

    用于根据表达式的值返回真值或假值

5>.位运算符

    用于处理数据的位运算。

6>.sizeof运算符

    用于求字节数长度。

 

二.算术运算符

运算符          术语           示例          结果
 +           正号            +3           3
 -           负号            -3           -3
 +           加            10 + 5         15
 -           减            10 - 5         10
 *           乘            10 * 5         50
 /           除            10 / 5         2
 %           取模(取余)       10 % 3         1
 ++           前自增          a=2,b=++a;      a=3;b=3;
 ++           后自增          a=2,b=a++;      a=3;b=2;
 --           前自减          a=2;b=--a;      a=1;b=1;
 --           后自减          a=2;b=a--;      a=1;b=2;
   

三.赋值运算符

运算符          术语           示例          结果
=           赋值           a=2;b=3        a=2;b=3;
 +=          加等于          a=0;a+=2;       a=2;
 -=           减等于          a=5;a-=3;       a=2;
*=           乘等于          a=2;a*=2;       a=4;
/=           除等于          a=4;a/=2;       a=2;    
 %=           模等于          a=3;a%2;        a=1;

四.比较运算符

运算符          术语           示例          结果("真"用数字"1"来表示,"假"用数字"0"来表示)
==           相等于          4==3          0
!=           不等于          4!=3          1
<            小于           4<3           0
>            大于           4>3           1
<=           小于等于         4<=3           0
>=           大于等于         4>=1           1

五.逻辑运算符

运算符          术语           示例          结果
 !            非            !=          如果a为假,则!a为真,如果为真,则!a为假。
&&            与           a && b        如果a和b都为真,则结果为真,否则为假。
||            或           a || b        如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

六.运算符优先级

说明:
  同一优先级的运算符,结合次序由结合方向所决定。
  简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符   详情请参考:https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[整型表达式]
左到右
 
()
圆括号
(表达式)/函数名(形参表)
 
.
成员选择(对象)
对象.成员名
 
->
成员选择(指针)
对象指针->成员名
 
2
-
负号运算符
-算术类型表达式
右到左
单目运算符
(type)
强制类型转换
(纯量数据类型)纯量表达式
 
++
自增运算符
++纯量类型可修改左值表达式
单目运算符
--
自减运算符
--纯量类型可修改左值表达式
单目运算符
*
取值运算符
*指针类型表达式
单目运算符
&
取地址运算符
&表达式
单目运算符
!
逻辑非运算符
!纯量类型表达式
单目运算符
~
按位取反运算符
~整型表达式
单目运算符
sizeof
长度运算符
sizeof 表达式
sizeof(类型)
 
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式%整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
整型表达式<<整型表达式
左到右
双目运算符
>>
右移
整型表达式>>整型表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
整型表达式&整型表达式
左到右
双目运算符
9
^
按位异或
整型表达式^整型表达式
左到右
双目运算符
10
|
按位或
整型表达式|整型表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
可修改左值表达式=表达式
右到左
 
/=
除后赋值
可修改左值表达式/=表达式
 
*=
乘后赋值
可修改左值表达式*=表达式
 
%=
取模后赋值
可修改左值表达式%=表达式
 
+=
加后赋值
可修改左值表达式+=表达式
 
-=
减后赋值
可修改左值表达式-=表达式
 
<<=
左移后赋值
可修改左值表达式<<=表达式
 
>>=
右移后赋值
可修改左值表达式>>=表达式
 
&=
按位与后赋值
可修改左值表达式&=表达式
 
^=
按位异或后赋值
可修改左值表达式^=表达式
 
|=
按位或后赋值
可修改左值表达式|=表达式
 
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序结合
 

七.类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。

转换的方法有两种:
自动转换(隐式转换):遵循一定的规则,由于编译系统自动完成。
强制类型转换:把表达式的运算结果强制转换成所需的数据类型。 类型转换的原则:
占用内存字节数少(或域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精确度不降低。

1>.隐式转换

[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# cat type_demo.c
/*
@author :yinzhengjie
blog:http://www.cnblogs.com/yinzhengjie
EMAIL:y1053419035@qq.com
*/ #include <stdio.h> int main(void)
{
int num = ;
printf("s1=%d\n",num/);
printf("s2=%1f\n",num/2.0);
return ;
}
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# gcc -o type_demo type_demo.c
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# ./type_demo
s1=
s2=2.500000
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#

2>.强制转换

[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# cat type_demo2.c
/*
@author :yinzhengjie
blog:http://www.cnblogs.com/yinzhengjie
EMAIL:y1053419035@qq.com
*/ #include <stdio.h> int main(void)
{
//强制类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,其基本语法格式为:(类型说明符)(表达式)
float x = ;
int i = ;
x = 3.6f;
i = x; //x为实型,i为整型,直接复制会有告警
i =(int)x; //使用强制类型转换
printf("x=%f,i=%d\n",x,i); return ;
}
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# gcc -o type_demo2 type_demo2.c
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# ./type_demo2
x=3.600000,i=
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]#

C语言基础知识-运算符与表达式的更多相关文章

  1. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  2. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  3. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  4. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  5. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  6. GO学习-(6) Go语言基础之运算符

    Go语言基础之运算符 运算符用于在程序运行时执行数学或逻辑运算. 运算符 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 + 相加 - ...

  7. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  8. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  9. PHP语言基础知识

    目录 前言 第一章 PHP语言学习介绍 1.1 PHP部署安装环境 1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍 2.2 PHP常量变量介绍 2.2.1 PHP变 ...

随机推荐

  1. 连接池-Mybatis源码

    持续更新:https://github.com/dchack/Mybatis-source-code-learn Mybatis连接池 有这么个定律,有连接的地方就有池. 在市面上,可以适配Mybat ...

  2. 有关dfs、bfs解决迷宫问题的个人见解

    可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...

  3. Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'xxxxx.Controllers.xxxxController'.

    Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activa ...

  4. python内存机制与垃圾回收、调优手段

    目录 一.python的内存机制 二.python的垃圾回收 1. 引用计数 1.1 原理: 1.2 优缺点: 1.4 两种情况: 2. 标记清除 2.1 原理: 2.2 优缺点: 3. 分代回收 3 ...

  5. Java程序员必了解的JVM原理以及虚拟机的运行过程

    JVM概念 虚拟机:指以软件的方式模拟具有完整硬件,VM概念 虚拟机:指以软件的方式模拟具有完整硬件系统功能.运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现.常用的虚拟机有VMWare ...

  6. 阿里巴巴 Java 开发手册 (六) 并发处理

    1. [强制]获取单例对象需要保证线程安全,其中的方法也要保证线程安全. 说明:资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯. 正 ...

  7. C#服务器全面讲解与制作

    C#服务器全面讲解与制作一 环境配置与基础架构 环境配置 基础的服务器架构 这里我会讲解高级的C#服务器的全面制作流程 会对大家有很大的帮助 不过在这个教程中主要是讲解服务器的制作,所以不会讲解客户端 ...

  8. asp.net core 之中间件

    Http请求资源的过程可以看成一个管道:“Pipe”,并不是所有的请求都是合法的.安全的,其于功能.性能或安全方面的考虑,通常需要在这管道中装配一些处理程序来筛选和加工这些请求.这些处理程序就是中间件 ...

  9. JavaScript前端和Java后端的AES加密和解密(转)

    在实际开发项目中,有些数据在前后端的传输过程中需要进行加密,那就需要保证前端和后端的加解密需要统一.这里给大家简单演示AES在JavaScript前端和Java后端是如何实现加密和解密的. java端 ...

  10. C# 的ToString 常用方法

    货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025E 科学型 25000.ToString(&q ...