c语言==运算符(7)

来源:互联网 发布:青山软件培训 编辑:程序博客网 时间:2024/06/15 19:56

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 = 5if(!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
0 0