C语言学习笔记(七)——其它运算符
第七章
其它运算符
逗号运算符
逗号运算符:即顺序点,逗号前先运行。后再运行。
for循环的运行次数:
for(i=n; i<m; ++i) //for循环共运行了m-n次。当m-n<0时,即for循环一次也不运行。
for(i=n; i<m; i+=k)//for循环共运行了(m-n)/k次,当有小数时。向前进1。当m-n<0时,即
for循环一次也不
运行。
三目(元)运算符
格式:A ? B : C;
由三部分组成,由问号?和冒号:隔开,A成立。运行B。A不成立,则运行C。
等价于:
if(A)
B;
else
C;
自增运算符
前自增:++i
(i加1后的值,即i+1)
后自增:i++
(i加1前的值。即i)
前自减:--i
(i减1后的值,即i-1)
后自减:i--
(i减1前的值。即i)
注意:
1、编程时应该尽量屏蔽掉前自增(减)和后自增(减)的差别;
2、i++
和 ++i
应该单独成一个语句。不要把它作为一个完整复合语句的一部分来使用
如:
intm = i++ + ++i + i + i++;
//这样写不可是不规范的代码,并且是不可移植的代码
或 printf("%d
%d %d", i++, ++i,i);
//这样写不可是不规范的代码。并且是不可移植的代码
即在 int m = i++ + ++i + i + i++;中,i的值是否添加,在i++与++i中是否已经改变是不清楚的。
有关顺序点的问题
顺序点:逗号:,
括号:(表达式)
分号:;
加号+不是顺序点。不知其i++是否已经计算生效
# include <stdio.h>
int main(void)
{
inti, j, k, m;
i= j = 3;
k= ++i; //计算后i = i + 1,即结果i值加1,
m= j++; //计算后j = j + 1,即结果j值加1,
printf("i= %d, j = %d, k = %d, m = %d\n", i, j, k, m);
return0;
}
/*
结果:
i= 4, j = 4, k = 4, m = 3
Pressany key to continue
总结:
前自增与后自增
同样处:都是使i与j的值加1。即i
= i + 1, j = j + 1;
不同处:前自增总体表达式的值是i加1之后的值,即先计算
++,值为i+1;
后自增总体表达式的值是i加1之前的值。即值为i;
*/
位运算符
& -- 按位与
(&& --
逻辑与。也叫而且)
k= i & j; //表示将两个数的二进制代码相应的每一位都进行与操作
运算法则:
1&1= 1
0&1= 0
1&0= 0
0&0= 0 //每一位与1相与还为原数,与0相与全为0,可依此来推断一个数据每一位的数字。
| -- 按位或
(|| --
逻辑或,也叫或者)
k= i|j; //表示将两个数的二进制代码相应的每一位都进行或操作
运算法则:
1|1= 1
1|0= 1
0|1= 1
0|0= 0 // 仅仅有当两位全为0时结果才为0。
~ -- 按位取反
~i表示把i的变量的所有二进制代码所有取反(包含用于补齐的0或1)。
^ -- 按位异或
运算法则:同样为0,不同为1
1^1= 0
1^0= 1
0^1= 1
0^0= 0
<< -- 按位左移
即将有效数字位左移。左移n位相当于乘2的n次方。
(二进制即乘2的n次方,十进制就是乘10的n次方。如小数点的移动)
i<<3表示把i的二进制代码左移3位,右边补0。
面试题:
A:i = i*8;
B:i = i<<3;
请问上述两个语句,哪个语句的运行速度快?
答案:B快。
由于A语句要动用硬件的乘法器进行乘法运算,B仅用位运算器就可以。
>> -- 按位右移
即将有效数字位右移,右移n位相当于除以2的n次方。进行位运算前提是数据不能丢失。
i>>3表示把i的二进制代码右移3位,左边正数补0,负数补1。
位运算的意义:通过位运算符我们能够对数据的操作精确到每一位,若不用位运算仅仅能精确到字节。
C语言学习笔记(七)——其它运算符的更多相关文章
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- Go语言学习笔记四: 运算符
Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 算术运算符 下表显示 ...
- C语言学习笔记二---数据类型运算符与表达式
一.C的基本语法单位 1.标识符:有效长度:31(DOS环境下) 2.关键字:main不是 3.分隔符:空格符,制表符,换行符,换页符 4.注释符:a./*.....*/ b.// 二.C的常用输 ...
- 《C# 语言学习笔记》——目录
C# 简介 变量和表达式 流程控制 3.1 布尔逻辑 3.2 goto语句 3.3 分支 3.4 循环 变量的更多内容 4.1 类型转换 4.2 复杂的变量类型 4.3 字符串的处理 函数 5.1 定 ...
- go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)
目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...
- C语言学习 第七次作业总结
C语言学习 第七次作业总结 数组可以分为数组和多下标数组(在传统的国内C语言书本中,将其称为二/多维数组). 数组名称 在之前的课程中,大家应该都有印象,对于int a这样的定义,会为变量 a 声明一 ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- C#.NET学习笔记7--11---算术运算符,变量赋值,变量的交换,布尔表达式1,布尔表达式2
C#.NET学习笔记7---算术运算符 2013/9/6 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com 1.Consol ...
随机推荐
- Python的并发并行[0] -> 基本概念
基本概念 / Basic Concept 快速跳转 进程 / Process 线程 / Thread 协程 / Coroutine 全局解释器锁 / Global Interpreter Lock ...
- cdq分治浅谈
$cdq$分治浅谈 1.分治思想 分治实际上是一种思想,这种思想就是将一个大问题划分成为一些小问题,并且这些小问题与这个大问题在某中意义上是等价的. 2.普通分治与$cdq$分治的区别 普通分治与$c ...
- poj3693(后缀数组)
poj3693 题意 给出一个串,求重复次数最多的连续重复子串,输出字典序最小的. 分析 论文 例8(P21). Sparse-Table算法预处理出任意两个后缀串的LCP. code #includ ...
- [POI2014]Ant colony
题目大意: 给定一棵$n(n\le10^6)$个结点的树.在每个叶子结点,有$g$群蚂蚁要从外面进来,其中第$i$群有$m_i$只蚂蚁.这些蚂蚁依次爬树(一群蚂蚁爬完后才会爬另一群),若当前经过结点度 ...
- 本地navicatl连接linux
首选你Linux服务器上要装配好了MySQL数据库.输入: # mysql -u root -proot mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@ ...
- Linux守护进程的启动方法(转)
作者: 阮一峰 日期: 2016年2月28日 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的 ...
- Word中如何让两个图片垂直居中对齐
如图,两个图片都剧终了,大小也一致,但是发现没有对齐,那是因为需要设置(矩阵框住的)缩进,让两个在一起,上下对齐.
- java 的""和null的区别
null和""的区别 问题一: null和""的区别 String s=null; string.trim()就会抛出为空的exception String s ...
- hdu2846 Repository
//--------------------------------------------------------------- /*---字典树应用问题.考虑到要查询的次数在10^6,显然直接插入 ...
- python pep8编码风格学习记录(转)
简要归纳 每个缩进层级使用4个空格. 每行最多79个字符. 顶层的函数或类的定义之间空两行. 采用ASCII或UTF-8编码文件 在文件顶端,注释和文档说明之下,每行每条import语句只导入一个模块 ...