「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。
算术操作符
+ - * / %
1.除了%之外,其他的几个操作符可以作用于整数与浮点数。
2.%的两个操作数必须为整数。
移位操作符
右移操作符: >> (有÷2的效果)
1.算术右移:右边丢弃,左边补原符号位
2.逻辑右移:右边丢弃,左边补0
int main()
{
int a = 16;
//>> -- 右移操作符
//移动的是二进制位
//00000000000000000000000000010000
int b = a >> 1;
printf("%d", b);
return 0;
}
int main()
{
int a = -1;
//整数的二进制表示有:原码,反码,补码
//存储到内存中的是补码
//10000000000000000000000000000001 -- 原码
//11111111111111111111111111111110 -- 反码
//11111111111111111111111111111111 -- 补码
int b = a >> 1;
printf("%d", b);
return 0;
}
左移操作符: << (有×2的效果)
左边丢弃,右边补0
注:对于移位操作符,不要移动负数位,这个是标准未定义的。且只能作用于整数
位操作符
- & 按位与
规则:
1&1=1
1&0=0
0&1=0
0&0=0
int main()
{
//& - 按2进制位与
int a = 3;
int b = 5;
int c = a & b;
//000000000000000000000000000000011 有一个是0就是0,两个都为1才是1
//000000000000000000000000000000101
//000000000000000000000000000000101
printf("%d", c);
return 0;
}
- | 按位或
规则:
1|1=1
1|0=1
0|1=1
0|0=0
int main()
{
//| - 按2进制位或
int a = 3;
int b = 5;
int c = a | b;
//000000000000000000000000000000011 有一个是1就是1,两个都为0才是0
//000000000000000000000000000000101
//000000000000000000000000000000111
printf("%d\n", c);
return 0;
^ 按位异或
规则:
1^1=0
1^0=1
0^1=1
0|0=0
int main()
{
//^ - 按2进制位异或
int a = 3;
int b = 5;
int c = a ^ b;
//000000000000000000000000000000011 相同为0,相异为1
//000000000000000000000000000000101
//000000000000000000000000000000110
printf("%d\n", c);
return 0;
}
例:交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换后a=5,b=3
法一
int main()
{
int a = 3;
int b = 5;
a = a + b;
b = a - b;
a = a - b;
printf("a=%d b=%d\n", a, b);
return 0;
}
法二:
int main()
{
int a = 3;
int b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d", a, b);
return 0;
}
赋值操作符
=
复合赋值操作
复合赋值运算符有下列这些:
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 模运算赋值
<<= 左移赋值 &= 位逻辑与赋值
|= 位逻辑或赋值
^= 位逻辑异或赋值
单目操作符
a+b :+双目操作符
单目操作符:只有一个操作数
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换