-
- 位运算符(了解)
针对整数进行的二进制级别的运算。
基本位运算符包括:按位与( & ), 按位或( | ), 按位非( ~ ), 按位异或(^)
-
-
- 位运算基本运算规则:
-
位运算符有如下基本运算规则:
(只针对二进制的0和1这两个数据的基本位运算规则):
按位与(&)运算规则:
0 & 1 结果为:0
0 & 0 结果为:0
1 & 0 结果为:0
1 & 1 结果为:1
结论:只有两个都是1,按位与运算结果才是1
按位或(|)运算规则:
0 | 1 结果为:1
0 | 0 结果为:0
1 | 0 结果为:1
1 | 1 结果为:1
结论:只有两个都是0,按位或运算结果才是0
按位非(~):
~1结果为0
~0结果为1
按位异或(^):
0 ^ 1 结果为:1
0 ^ 0 结果为:0
1 ^ 0 结果为:1
1 ^ 1 结果为:0
规则是:相同为0,不同为1
-
-
- 整数的按位与(&)运算
-
含义:
是针对整数的二进制值进行的位运算结果。
将两个整数的二进制值的每一个对应位上的二进制数字进行对应的按位与运算
$v1 = 6 & 8; //这里,虽然是普通整数,但其内部是按该整数的二进制形式进行位运算
运算规则:
将6和8的二进制数字的每一个对应位上的数字(0或1)进行基本的按位与(&)的运算所得到的结果。
| 数字6的二进制 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
| 数字8的二进制 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
| 按位与结果 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
结果:0
再来一个:
$v2 = 7 & 9;
| 数字7的二进制 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
| 数字9的二进制 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
| 按位与结果 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
结果:1
还有整数的其他位运算:
按位或,按位左移,按位右移。
-
-
- 按位左移运算
-
$v1 = 8 << 2; //8是要进行左移运算的整数,2是表示要进行移动的位数。
含义:
将8这个数的二进制形式的数字的所有位都往左边移动2位,最右边空出部分填0(补0),最左边部分就会有2位“冒出去”了,也不要处理(不管),这样移动后,所得到的二进制数就是结果。
分析如下:
| 8的二进制 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
| 左移两位后: |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
结果:1*25 = 32
再来一个:
$v2 = 11<<3
| 11的二进制 |
|
|
|
|
|
1 |
0 |
1 |
1 |
| 左移3位后: |
0 |
|
1 |
0 |
1 |
1 |
0 |
0 |
0 |
结果:1*26 + 0 + 1*24 + 1*23 + 0 + 0= 64 + 0 + 16 + 8 = 88
总结:
将一个整数左移n位,就是相当于将该数乘以2的n次方。