1.操作符分类
2.算数操作符
%只能用于整数运算
3.移位操作符
移位操作符的操作数只能是整数
注意:不能移动负位数,标准未定义
3.1
整数的二进制表示形式有三种:
原码、反码、补码
原码:按照数值的正负,直接写出的二进制序列
对于一个整数是四个字节,即32bit位
其二进制序列就是32bit位
对于有符号的整数来说,其第一位为符号位,表示正负,1表示负数,0表示正数
对于无符号整数来说(用unsigned int定义的变量),所有位都是有效位,没有符号位
对于正整数,其原码、反码、补码相同
对于负的整数来说,原码、反码、补码需要计算
反码:原码符号位不变,其他有效位按位取反
补码:反码二进制加1
整数,在内存中存储的都是补码的二进制序列,在计算时也使用的是补码
提示:补码取反 再+1也可以得到原码
3.2
左移操作符:
<<
左边丢弃、右边补0
提示:即使是负数,其运算之后不改变符号
有*2的效果
右移操作符:分为两种右移方式
算术右移和逻辑右移
逻辑右移:右边直接丢弃,左边补0
大部分编译器采用的是:
算术右移:右边直接丢弃,左边补符号位
原来是负数,左边补1
原来是正数,左边补0
有/2的效果
4.位操作符
操作数必须是整数
操作的是二进制位
4.1 &按位与
对应的二进制位都为1,则为1
否则为0
应用:
要知道一个数的二进制序列最低位是什么,将其&1,结果为1,则为1,否则为0
再结合移位操作符,就可以得知二进制序列的任意一位
4.2|按位或
对应的二进制位都为0,才为0
否则为1
4.3 ^按位异或
对应的二进制位相同为0,相异为1
注意:
a ^ 0 = a
a ^ a = 0
并且按位异或支持交换律
5.单目操作符
5.1!逻辑反操作
令假为真、真为假
可用于条件判断
5.2&取地址操作符
提示:数组指针存储数组地址
Int arr[10] = { 0 };
int(*pa)[10] = &arr;
5.3*解引用操作符(间接访问操作符)
int a = 0;
int*p = &a;
//*p 是通过p中存放的地址,找到p指向的对象,*p就是a
5.4 sizeof
计算类型创建的变量的大小,单位是字节
可以用以下三种形式
sizeof计算的结果是size_t类型的
size_t是无符号整型的
对size_t类型的数据进行打印,用%zd,当不支持%zd时,用%u
5.5 ~按位取反
1取反为0、0取反为1
提示:
-1的补码是32个1
6.逻辑操作符
6.1
&&逻辑与:并且
||逻辑或:或者
注意:短路操作
&&: 左边操作如果为假,右边则不再计算
||:左边操作如果为真,右边则不再计算
未完待续…