1、算术操作符:
+ - * / %
2.移位操作符:
(1)、左移操作符
详细过程是: a值是占四个字节,也就是32位
把这数向左移动一位:
后面缺失的,补0,形成新的数(就是红色线框中的数值),得到的结果是,4:
(2)、右移操作符
A、对于正数来说:
int a = 10;
//把a的二进制向右移动1位
int b = a >> 1;
printf("b = %d\n",b);
右移一位,空出的最高位补原符号位(正0;负1),所以该数补0.得结果5:
B、对于负数来说
int main() {
int a = -1;
//把a的二进制向右移动1位
int b = a >> 1;
printf("b = %d\n",b);
return 0;
}
负数在内存中的存储,存放的是二进制的补码。
整数的二进制表示形式:其实是三种
原码:直接根据数值写出的二进制序列就是原码
反码:原码符号位不变,其它位按位取反就是反码
补码:反码 +1,就是补码
实例中:
原码:10000000000000000000000000000001
反码:11111111111111111111111111111110
补码:11111111111111111111111111111111
3、位操作符
A、& -- 按(二进制 )位与
int a = 3;
int b = 5;
int c = a & b;
规则:有0则0,都是1 为1
B、 | 按(2进制)位或
规则有1为1,都是0 为0
C、^ 按(2进制)位异或
规则:相同为0,相异为1
4、赋值操作符
= += -= *= /= >>= <<= %=
5、单目操作符
! 逻辑取反
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(字节为单位)
~ 对一个二进制数按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
5、逻辑操作符
&& ||
6、关系操作符
> < >= <= != ==
7、条件操作符,三目操作符
(表达式1)?(表达式2):(表达式3);
8、逗号表达式
表达式1,表达式2,表达式3,........
逗号表达式,就是用逗号隔开多个表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
9、整形数据提升
具体的分析: