第七章                         
其它运算符

 

逗号运算符

逗号运算符:即顺序点,逗号前先运行。后再运行。

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语言学习笔记(七)——其它运算符的更多相关文章

  1. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  2. Go语言学习笔记四: 运算符

    Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...

  3. 吴裕雄--天生自然C++语言学习笔记:C++ 运算符

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 算术运算符 下表显示 ...

  4. C语言学习笔记二---数据类型运算符与表达式

    一.C的基本语法单位 1.标识符:有效长度:31(DOS环境下) 2.关键字:main不是 3.分隔符:空格符,制表符,换行符,换页符 4.注释符:a./*.....*/   b.// 二.C的常用输 ...

  5. 《C# 语言学习笔记》——目录

    C# 简介 变量和表达式 流程控制 3.1 布尔逻辑 3.2 goto语句 3.3 分支 3.4 循环 变量的更多内容 4.1 类型转换 4.2 复杂的变量类型 4.3 字符串的处理 函数 5.1 定 ...

  6. go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)

    目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...

  7. C语言学习 第七次作业总结

    C语言学习 第七次作业总结 数组可以分为数组和多下标数组(在传统的国内C语言书本中,将其称为二/多维数组). 数组名称 在之前的课程中,大家应该都有印象,对于int a这样的定义,会为变量 a 声明一 ...

  8. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  9. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  10. C#.NET学习笔记7--11---算术运算符,变量赋值,变量的交换,布尔表达式1,布尔表达式2

    C#.NET学习笔记7---算术运算符 2013/9/6 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com 1.Consol ...

随机推荐

  1. Codeforces Gym100952 B. New Job (2015 HIAST Collegiate Programming Contest)

      B. New Job   time limit per test 1 second memory limit per test 64 megabytes input standard input ...

  2. (12)oracle事务

    事物 http://www.cnblogs.com/linjiqin/archive/2012/02/06/2340637.htm 在当前的事务中设置保存点 savepoint  名字; 保存点回滚 ...

  3. 51nod 算法马拉松 34 Problem D 区间求和2 (FFT加速卷积)

    题目链接  51nod 算法马拉松 34  Problem D 在这个题中$2$这个质数比较特殊,所以我们先特判$2$的情况,然后仅考虑大于等于$3$的奇数即可. 首先考虑任意一个点对$(i, j)$ ...

  4. 线段树【p1115】 最大子段和

    题目描述-->p1115 最大子段和 虽然是一个普及-的题,但我敲了线段树 qwq 数组定义 \(lsum[ ]\)代表 该区间左端点开始的最大连续和. \(rsum[ ]\)代表 该区间右端点 ...

  5. 【bzoj4152】【The Captain】最短路(堆优化)(浅尝ACM-B)

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62834538 Description 给定平面上 ...

  6. HTTP抓包工具Fiddler

    http://blog.csdn.net/kobejayandy/article/details/16908261

  7. java的几个概念AOP、IOC、DI、DIP、工厂模式、IOC容器

    1.AOP:面向切面编程 把一些公共类,比如日志类.安全类.数据库连接类.系统统一的认证.权限管理类.资源池(如数据库连接池的管理).性能监控等做成一个公共类,当其他类需要时,进行注入(调用).这样这 ...

  8. django验证码django-simple-captha

    搭建网站很经常要用到验证码,django中就有这样的中间件django-simple-captha githup地址https://github.com/mbi/django-simple-captc ...

  9. 对Linux文件权限的理解

    755,775,777,ugoa 等分别代表什么含义?这些数字是如何得到的? 1.常用的linux文件权限: 444 -r--r--r-- 600 -rw------- 644 -rw-r--r-- ...

  10. EffectiveJava(1) 构造器和静态工厂方法

    构造器和静态工厂方法 **构造器是大家创建类时的构造方法,即使不显式声明,它也会在类内部隐式声明,使我们可以通过类名New一个实例. 静态方法是构造器的另一种表现形式** 主题要点:何时以及如何创建对 ...