前言:
程序在计算机内存里都是二进制的方式存储的,位运算直接对整数在内存中的二进制位进行操作,而位运算属于逻辑运算
位运算符:
名字 | 运算符 | 写法 | 返回值 |
逻辑非 | ~ | ~20 | int |
逻辑与 | & | 80&20 | int |
逻辑或 | 丨 | 80丨20 | int |
逻辑异或 | ^ | 80^20 | int |
逻辑左移 | << | 80<<2 | int |
逻辑右移 | >> | 80>>2 | int |
位逻辑非
该运算符在二进制当中及就是取反,
1=0 0=1
101010 (源)
010101 (取反)
正数取反 及-x+1 如: 50 取反后 -51
负数取反 及+x-1 如: -19 取反后 18
代码:
int n=~912; //-913
位逻辑与
两个对象进行位的比较
1与1等于1
1与0等于0
0与0等于0
也就是1和1情况才是1其他为0
十进制 21 和 28 与运算 结果为:20
代码
int n =52&28; //20
位逻辑或
也是两个对象比较
1或1等于1
1或0等于1
0或0等于0
也就是0和0情况才是0其他为1(与运算相反)
十进制 21 和 28 或运算 结果为:29
代码
int n =90|28;
与 运算 和 或 相反
位逻辑异或
一样等于 0
不一样等于 1
int n =21^28; //9
逻辑位左移
左移 越移越大
右移 越移越小
从右往左移动,移出来的空位0补位
例如: 11 左移 2位 = 44
int n = 11 << 2; //44
逻辑位右移
右移动和左移的原理一样 只是方向不同
例如: 11 右移 2位 = 2
例如:移2位 那么后2位就丢弃 丢弃后:0 0 1 0
1 0 1 1 (11)右移2位= 0 0 1 0(2)
0010 其中的 00 是补的空位
int n = 93>>3; //11