//求整数中二进制的个数int main()
{
int count = 0;
int num = -1;
int i = 0;
for (i = 0; i < 32; i++)
{
if ((num >> i) & 1 == 1)
count ++;
}
printf("%d\n", count);
system("pause");
return0;
}
位操作符
& | ^
& 按位与,有0为0,全1为1;
| 按位或,有1为1,全0为0;
^ 按位异或,相异为1,相同为0;
实例如下:
int main()
{
int a = 1;
int b = 2;
printf("%d\n", a & b); //0printf("%d\n", a | b); //3printf("%d\n", a ^ b); //3
system("pause");
return0;
}
//没有中间变量,交换两个数//a ^ a = 0; a ^ 0 = a;int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d\n", a, b);
system("pause");
return0;
}
赋值操作符
=
对于连续的赋值,分开写易于调试和理解
例子如下:
int weight = 129; //初始化
weight = 110; //赋值int a = 10;
int b = 20;
int c = 30;
c = a = b + 10;
//分开写
a = b + 10;
c = a;
复合赋值操作符
+= -= *= /= %= >>= <<= &= |= ^=
这些运算符都可以写成复合的形式
a = a + 10;
a += 10;
单目操作符
! - + & sizeof ~ -- ++ * (类型)
它们的作用如下
操作符
作用
!
逻辑反,表真假
+ -
表示正负
&
取址
sizeof
求操作数大小(单位字节)
~
按位取反
++ - -
前置,后置++,- -
*
解引用
(类型)
强制类型转换
//!int main()
{
int flag = 10;
printf("%d\n", !flag); //0return0;
}
// ++ --int main()
{
int a = 10;
int b = a++; //先使用后++,b = 10, a = 11;int c = a--; //先使用后--, c = 11, a = 10;return0;
}
int main()
{
int a = 10;
int b = ++a; //先++后使用,a = 11, b = 11;int c = --a; //先--后使用,a = 10, b = 10;return0;
}
关系操作符
> >= < <= != ==
这些操作符比较简单,但要注意 ==
int main()
{
int i = 0;
for (i = 0; i < 5; i++)
{
if (i = 3) //程序死循环,条件一直为真printf("hahah\n");
}
return0;
}
//上面的程序可以改为int main()
{
int i = 0;
for (i = 0; i < 5; i++)
{
if (3 == i) //如果写成if(3 =i)程序会报错,变量不能赋给常量printf("hahah\n");
}
return0;
}
逻辑操作符
&& ||
&& 表达式为假,就不判断后面的表达式;
|| 表达式为真,就不判断后面的表达式;
int main()
{
int i = 0;
int a = 0;
int b = 2;
int c = 3;
int d = 4;
i = a++ && ++b && d++; //a = 0; 条件为假,不判断后面的表达式printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
return0;
//结果为a = 1;b = 2; c = 3; d = 4
}
条件操作符
exp1 ? exp2 : exp3
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
if (a > 5)
b = 3;
else
b = -3;
printf("%d\n", b);
return0;
}
//上面的程序可以写成:int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = (a > 5)? 3 : -3;
printf("%d\n", b);
return0;
}