C语言学习笔记(七)——其他运算符
来源:互联网 发布:linux 增加home空间 编辑:程序博客网 时间:2024/05/29 11:03
第七章 其他运算符
逗号运算符
逗号运算符:即顺序点,逗号前先执行,后再执行。
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语言学习笔记(七)——其他运算符
- C学习笔记(七)运算符与表达式
- 【黑马程序员】C语言学习笔记之基本运算(七)
- C语言程序学习(七)笔记
- PHP学习笔记——PHP中其他运算符;
- c语言笔记——运算符
- C语言学习笔记<七>
- (三十)C语言学习笔记(一)——类型、运算符与表达式
- C语言学习笔记(运算符)
- C语言面试题七——其他篇2
- C语言学习笔记(六)——其他编程知识
- C 语言学习笔记(七)——文件操作(2)
- C语言学习笔记(3)——指针七题
- 黑马程序员——C语言---七种运算
- C++语言(七)——运算符重载
- C语言笔记(七)
- C语言学习笔记——数据的类型、存储、作用域,运算符,表达式
- C语言学习笔记(一)赋值运算符,逗号运算符
- Android中对sd卡的读写权限问题
- [leetcode] Palindrome Number
- Highcharts后台取数据 并且绑定每块事件
- [Qt C++]对酷狗krc文件进行解码
- Intermediate Unity 3D for iOS: Part 1/3
- C语言学习笔记(七)——其他运算符
- LNMP环境搭建——MySQL篇
- jsp A标签中文excel文件下载报404,无法下载
- [leetcode][array] Summary Ranges
- Nginx 用log_format设置日志格式
- C语言学习笔记(八)——其他计算机知识
- Intermediate Unity 3D for iOS: Part 2/3
- centos7下安装ifconfig 命令
- 通过node.js保存emoji到mysql