1、逗号运算符
/*
程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。
并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。
*/
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int a=3,b=5,z;
z=a>b,a+b;//在这个运算过程中,逗号的运算优先级比赋值运算的优先级要低,因此应该先算赋值运算,再算逗号运算
printf("%d",z);
z=(a>b,a+b);//在这个运算过程中,赋值的运算优先级比特殊运算符的优先级要低,因此应该先算特殊运算,再算赋值运算运算,在特殊运算中,逗号运算的结果是输出逗号后面的数。
printf("%d",z);
system("pause");
return 0;
}
2、位运算符
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int a=9,b=5,c;
c=a&b;
printf("%d\n",c);//按位与运算符"&"是二元运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
c=a|b;
printf("%d\n",c);//按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
c=a^b;
printf("%d\n",c);//按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1.相同为0.
c=~a;
printf("%d\n",c);//求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。
c=a<<4;
printf("%d\n",c);//左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数
c=b>>4;
printf("%d\n",c);//右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
// 应该说明的是,对于无符号数,在移动的时候前面补0,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1
system("pause");
return 0;
}
在求反运算中需要注意一些问题:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
short a=0xf45a,b;
b=~a;
printf("%x\t%x",a,b);//这个的结果说明在运算中如果%x表明了将结果以int的形式给输出,如果结果前面为1则前面的几位都为1,如果为0,则前面的也为0.
system("pause");
return 0;
}