移位操作符《 》
算术右移
0000 0000 0000 1000》0000 0000 0000 0100左边补原符号位 右边丢弃
逻辑右移
左边补零 右边丢弃
例如:
int a=16;
int b = a>>1;
则b=8
整数的二进制有原码,反码,补码
储存到内存的是补码
int a=-1
原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码:1111 1111 1111 1111 1111 1111 1111 1111
移位符移动的是补码所以-1>>1是
1111 1111 1111 1111 1111 1111 1111 1111 1111
而相反:左移操作符为左边丢弃,右边补零
按位与&
int a =3;
int a =5;
int c =a&b;
//0000 0000 0000 0000 0000 0000 0000 0011
//0000 0000 0000 0000 0000 0000 0000 0101
两个都为1则为1
所以:0000 0000 0000 0000 0000 0000 0000 0001
按位或 |
int a =3;
int a =5;
int c =a|b;
//0000 0000 0000 0000 0000 0000 0000 0011
//0000 0000 0000 0000 0000 0000 0000 0101
有一个1则为1
所以:0000 0000 0000 0000 0000 0000 0000 0111
按位异或^(对应二进制位相同为0;相异为1)
int a =3;
int a =5;
int c =a|b;
//0000 0000 0000 0000 0000 0000 0000 0011
//0000 0000 0000 0000 0000 0000 0000 0101
所以:0000 0000 0000 0000 0000 0000 0000 0110
加减法交换两个数位置
a=a+b
b=a-b
a=a-b
用按位异或的方法交换两个数的位置
a= a^b
b=a^b
a=a^b
求储存在计算机中数的1的个数
赋值运算符
sizeof()里面的表达式不参与运算
~按位取反
结果为40 10 4 4,注意arr ch传过去的是首地址的地址相当于指针变量
指针变量在32位环境下为4字节
整型提升