算术操作符
+ - * / %
%左右操作数必须都是整型
移位操作符
<< >>
右移操作符:1.算术右移:右边丢弃,左边补原符号位
2.逻辑右移:右边丢弃,左边补0
左移操作符:左边丢弃 右边补0
警告:对于移位操作符,不要移动负数位,这个标准是未定义的
int num = 10;
num>>-1;//error
int main()
{
int a = 16;
int b = a >> 1;//移动二进制位 16 00010000
printf("%dn", b);
return 0;
}
位操作符
& 按二进制位与
| 按二进制位或
^ 按二进制位异或
操作数必须是整数
int main()//不适用临时变量,交换两个数的值
{
int a = 3;
int b = 5;
a = a + b;//加减法,可能会溢出
b = a - b;
a = a - b;
a = a ^ b;//异或法
b = a ^ b;
a = a ^ b;
printf("a=%d,b=%dn", a, b);
return 0;
}
int main()
{
int num = 0;
int count = 0;
scanf("%d", &num);
统计num的补码中有几个1
while (num)//无法计算负数
{
if (num % 2 == 1)
count++;
num = num / 2;
}
num&1 == 1;
最低位一定是1
int i = 0;
for (i = 0; i < 32; i++)
{
if (1 == ((num >> i) & 1))
count++;
}
printf("%dn", count);
return 0;
}
赋值操作符
可以连续赋值
复合赋值符
单目操作符
只有一个操作数
&取地址
int* p =&a;取地址操作符
*p 解引用操作符
sizeof计算的是变量所占内存空间的大小,单位是字节
int main()
{
short s = 0;
int a = 10;
printf("%dn", sizeof(s = a + 5));//sizeof内部表达式并不参与运算
printf("%dn", s);
}
~按二进制位取反
int main()
{
int a = 0;
printf("%dn", ~a);
}
前置++,先++。后使用
后置++,先使用,后++
强制类型转换(type)
关系操作符
注意 ==判断相等 =赋值操作符
逻辑操作符
&&逻辑与
||逻辑或
条件操作符
exp1?exp2:exp3
都好表达式
用来隔开多个表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果
下标引用操作符
操作数:一个数组名+一个索引值
函数调用操作符 接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数



