c语言==运算符(7)
2016-07-16 14:27
274 查看
tips:
1、== 是判断相等的符号,但是有的时候会不慎写成=,这个时候编译的时候不会报错,但是这个语句就不会形成约束条件,这个条件下的语句会无条件执行。所以一般将数字写在左边,表达式写在右边,这样万一写错的话就会报错。2、&&是短路与,一旦前面的表达式错了,就不会执行后面的表达式。
3、||是短路或,一旦前面的表达式对了,就不会执行后面的表达式。
如
int i = 0; int j = 0; if((++i) < 0 && (j++) > 0) { …… } printf("%d,%d\n" , i, j); //打印结果为i = 1, j = 0;
int num = 5; if(!num) { printf("A"); } else printf("B"); //这个函数的意义是 0打印A,非0打印B
掩码
常量是有符号数,当他和无符号数进行运算的时候,结果会变成有符号数,所以要给常量进行无符号强制转化。如unsigned int掩码是用来方便位操作(与,或,抑或,左移,右移)的,因为可以与数的机器数进行相与等位操作,得到数字。
//想要依次得到数字。可以向右移,然后与掩码1相与,也可以向左移,与十六进制的0x80000000相与,此时如果用二进制的,系统可能识别不了。 //掩码mask的获得方法(例如想得到右边开始m位到n位的值): //将0这个数的二进制数取反,然后向右移32-(n-m+1)位,再向左移m位,(注意转换无符号数) (unsigned int)~(unsigned int)0>>(32-(n-m+1))<<m //还可以2^(n+1)-2^m,直接获取他的二进制数,即掩码 //有符号数左移用0补齐,而右移用符号位补齐,所以要强制转换成无符号数。
&运算符
(1)清0特定位(mask中特定位置0,其他位为1,s = s & mask)(2)取某位中的指定位(mask特定位置1,其他位为0,s = s & mask)
|(或)运算符
将特定位置1,而其他位不变^(抑或)运算
(1)不使用中间变量而交换两数(2)将特定位取反(mask特定位置1,s = s & mask)
//交换两数而不使用中间变量 //抑或的方法 a = a ^ b; b = a ^ b; a = a ^ b; //加法的方法 a = a + b; b = a - b; a = a - b; //但是他的缺点就是可能会溢出 //乘法的方法 //缺点是不能交换0
条件(三目)运算符
(表达式)?(结果1):(结果2); //根据表达式进行判断,如果表达式是对的,就执行结果1,否则就是结果2
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua中关系运算符的使用教程