您的位置:首页 > 编程语言 > C语言/C++

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息