5.3  挑几个运算符来讲  

常用的运算符除了加减乘除(+-*/)外,还有如下:

注意:以下运算符之间用逗号隔开,C语言中也有逗号运算符,这里不讲逗号运算符。

1. 赋值运算符 =,+=,*=

2. 一元运算符 ++, --

3. 相等运算符 ==,!=  ,关系运算符 < ,>,<=,>=

4. 条件运算符 ?:

6. 位运算符 &, ^, |  ,! 逻辑运算符 &&, ||,  移位运算符 >>, <<

 5.3.1 赋值运算符

  给变量赋值,可以通过“=”连接,将右边的数值赋值给左边的变量,如:

int a = ;
int b;
b = ;

  赋值运算符中还能够做加减乘除与或非等等的运算,如:

#include <stdio.h>

void main()
{
int a = ; a += ;
printf("a = %d \n", a);
}

  运行结果为:a = 110;

   上述a += 100 等价于 a = a + 100; 以此类推, a -= 100 等价于 a = a - 100; a *= 100; 等价于 a = a * 100 ......后续讲到的&,^,| 等位运算符也能结合“=”凑合着来使用。

5.3.2 一元运算符,增增,减减

   C语言中一元运算符,有加加++和减减--,但是没有乘乘**和除除//。因为++的意思是变量加一,--的意思是变量减1,所以没有必要**和//,因为变量乘以1和除以1都是等于变量本身。

  因为++和--的意思类似,所以就挑++来讲解。
  ++可以放在变量前面,也可以放在变量后面,意思不同,写法如下:

int a = ;
++a;
a++;

  ++a是先进行自增1的运算,然后进行其它的操作,a++是先进行其它操作,然后再进行自增1的运算,这么说不好理解,如下代码:

#include <stdio.h>

void main()
{
int a = ;
int b = ; a = ++b; printf("a = %d b = %d\n", a, b);
}

  运行结果是:a = 11 b = 11; 代码中,a在变量声明的时候赋值为0,b赋值为10,在运算表达式中,a = ++b; 先进行b的自增运算,这时候b就变为了10+1 = 11,然后赋值给a,a的取值就变为11了,再看下一段代码:

#include <stdio.h>

void main()
{
int a = ;
int b = ; a = b++; printf("a = %d b = %d\n", a, b);
}

  运行的结果是:a = 10 b = 11;代码中,a在变量声明的时候赋值为0,b赋值为10,在运算表达式中,a = b++;先进行a = b 的赋值运算,然后再进行b = b + 1 的自增运算,所以a的取值就是10,b的取值为11。

  如果++b和b++是完整的一句表达式,

  注意:完整的一句表达式以分号;作为为这句结束的标识。

  也就是,

#include <stdio.h>

void main()
{
int a = ; ++a; printf("a = %d\n", a);
}

#include <stdio.h>

void main()
{
int a = ; a++; printf("a = %d\n", a);
}

    它们的运行结果是一致的,因为完整的一句表达式中,没有其它的操作,所以就只做了自增1的操作。所以请记住:++a是先进行自增1的运算,然后进行其它的操作,a++是先进行其它操作,然后再进行自增1的运算

   熟悉了以上概念就可以思考以下结果:

int a, b, c, d,e, f, g, h;

a = ;
b = (a++) + (a++) + (a++);
a = 10;
c = (++a)+ (++a) + (++a);
a = 10;
d = (++a) + (a++) + (a++);
a = 10;
e = (a--) + (a--) + (a--);
a = 10;
f = (--a)+ (--a) + (--a);
a = 10;
g = (--a) + (a--) + (a--);
a = 10;
h = (a--) - (a++) + (++a) - (--a);

  请问b,c,d,e,f,g,h的取值为多少?不理解的话可以再次回顾刚才的概念,然后加printf语句来核对结果。

5.3.3 和bool值有关的相等运算符与关系运算符

  第四章的时候有讲过一种数据类型叫做 bool,它的取值就两种,true,false。计算机语言是二进制,内存中,true等于1,false等于0,如以下代码,

#include <stdio.h>
#include <stdbool.h> void main()
{
printf("%d , %d \n", true, false);
}

 运行结果为 1 , 0;所以更加清晰的了解了,真true的值为1,假false的值为0。

 注意:需要声明头文件 stdbool.h 才可以使用 bool 变量,才可以打印 true 和 false 的值。

 有了以上概念,就可以理解相等运算符的取值了,比如两个等于号 == ,意思为这两个取值是否相等,是的话运算结果值为1,不是的话运算结果值为0。

 注意:千万不要把赋值运算符 = 与相等运算符 == 混淆了!后续讲解条件语句会再提到这点。

 感叹号加上等号 != ,意思为这两个值是否不相等,是的话运算结果值为1,不是的话运算结果值为0。代码如下:

#include <stdio.h>
#include <stdbool.h> void main()
{
int a = ;
int b = ;
bool c; c = (a == b); printf("c = %d \n", c);
}

  运行结果为,c = 0;所以c的值就说明了 a == b 是假,也就是 a 和 b 相等是不成立的。

  注意:读者可以自行改代码,把 b = 5 改为 b = 10 ,就能发现,c的值变为1了,说明这时 a 等于 b 成立。

  把代码稍微修改一下,把 a == b 改为, a != b 如下:

#include <stdio.h>
#include <stdbool.h> void main()
{
int a = ;
int b = ;
bool c; c = (a != b); printf("c = %d \n", c);
}

  运行结果为,c = 1;说明 a 不等于 b 是成立的,所以运算结果值取1。

  同理,小于号 < 取运算结果,左边是否小于右边,是的话运算结果值取1,否的话运算结果值取0;

  小于等于号 <= ,大于号 > ,大于等于号 >= 也都是这样的用法。

 5.3.4 条件运算符

  问号加上冒号就组成了条件运算符的表示 ?: ,使用方式一般套用以下格式:

条件 ? 表达式1 : 表达式2

条件其实也是一种表达式,只不过条件的取值是 bool 值,如果取值是true(1),运算表达式1,如果取值是false (0),运算表达式2,代码如下,

#include <stdio.h>
#include <stdbool.h> void main()
{
int a = ;
int b = ; (a > b) ? (++a) : (++b); printf("a = %d, b = %d\n", a, b);
}

  运行结果为:a = 11, b = 5;  在表达式 (a > b) ? (++a) : (++b); 中, 先判断 a 是否大于 b,结果是大于,所以选择问号后面的表达式 ++a 来运算。

  后续讲到宏定义的时候会再次涉及条件运算符做个小功能,这里mark一下。

C语言编程入门之--第五章C语言基本运算和表达式-part3的更多相关文章

  1. C语言编程入门之--第五章C语言基本运算和表达式-part1

    导读:程序要完成高级功能,首先要能够做到基本的加减乘除.本章从程序中变量的概念开始,结合之前学的输出函数和新介绍的输入函数制作简单人机交互程序,然后讲解最基础的加减法运算,自制简单计算器程序练手. 5 ...

  2. C语言编程入门之--第五章C语言基本运算和表达式-part2

    5.1.4 再来一个C库函数getchar吸收回车键 回车键也是一个字符,在使用scanf的时候,输入完毕要按下回车键,这时候回车键也会被输入到stdin流中,会搞乱我们的程序. 注意:stdin是输 ...

  3. C语言编程入门之--第五章C语言基本运算和表达式-part4

    5.3.5 和二进制极为密切的运算符 本小节的运算符需要借助二进制概念来理解. 二进制数据中,比如一个字节的数据,它的十进制为228,二进制就为11100100,如图5.11, 注意:如果不懂怎么转换 ...

  4. C语言编程入门之--第四章C语言基本数据类型

      导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...

  5. C语言编程入门之--第六章C语言控制语句

    导读:本章带读者理解什么是控制语句,然后逐个讲解C语言常用的控制语句,含有控制语句的代码量多起来后就要注意写代码的风格了,本章末节都是练习题,大量的练习才能掌握好控制语句的使用. 6.1 什么是控制语 ...

  6. C语言编程入门之--第三章编写第一个C语言程序

    第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...

  7. C语言编程入门之--第一章初识程序

    第一章 初识程序 导读:计算机程序无时不刻的影响着人类的生活,现代社会已经离不开程序,程序的作用如此巨大,那么程序到底是什么呢?本章主要讨论程序的概念,唤起读者对程序的兴趣,同时对C语言程序与其它语言 ...

  8. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

  9. VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)

    上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用. CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作.这些 ...

随机推荐

  1. py+appium微信公众号自动化(已搞定多个坑)

    最近需要做微信公众号的自动化测试,遇到了不少坑. 微信公众号自动化与app自动化还是有区别的,因为多了不少坑.打开微信x5内核调试的就不说了,百度有. 1.首先,微信公众号有webview,uiaut ...

  2. 1.svn 彻底clear时,注意代码备份 2.借助vc助手加头文件

    1.svn 彻底clear时,注意代码备份 2.不小心彻底clear可以在回收站找到 3.借助vc助手加头文件

  3. ViewPager取消切换动画

    /** * Created by apk2sf on 2017/12/2. * email: apk2sf@163.com * QQ:337081267 */ public class NoAnima ...

  4. Java编程基础阶段笔记 day01 Java语言概述

    ​目录内容 DOS命令 电脑配置 Java语言的特性 Java两种核心机制 Java语言环境搭建 第一个Java程序 注释 Java语句说明 编程风格 作业 常用的DOS命令 dir :    列出当 ...

  5. Webpack打包效率优化篇

    Webpack基础配置: 语法解析:babel-loader 样式解析:style-loader css解析:css-loader less解析:less-loader 文件解析:url-loader ...

  6. nl2br()处理字符串中的换行符

    nl2br() 函数 在字符串中包含换行符时,需要对其进行转换,php 中有str_replace()函数,可以直接对字符串进行替换处理.但php中还有nl2br()函数可以直接处理. 1.在字符串中 ...

  7. zabbix 支持的主要监控方式

    zabbix 支持的主要监控方式 一.zabbix支持的主要监控方式: zabbix主要Agent,Trapper,SNMP,JMX,IPMI这几种监控方式,本文章主要通过监控理论和实际操作测试等方式 ...

  8. AQS原理浅析

    锁是最常用的同步方法之一,在高并发的环境下激烈的锁竞争会导致程序的性能下降,所以我们自然有必要深入的学习一下锁的相关知识. java的内置锁一直都是备受争议的,在JDK 1.6之前,synchroni ...

  9. jumpserver1.4.1 安装过程

    # 修改字符集 localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 echo 'LANG="zh_CN. ...

  10. 【Python-Django定义用户模型类】Python-Django定义用户模型类详解!!!

    定义用户模型类 1. Django默认用户认证系统 Django自带用户认证系统 它处理用户账号.组.权限以及基于cookie的用户会话. Django认证系统位置 django.contrib.au ...