在ECMAScript中所有的运算都是64位格式进行存储的,但位运算操作符不直接操作64位的值,而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换成64位。而对于开发过程中,所有的64操作是透明的,所以位运算也就是指的是32位的二进制的运算;
下面的引用一些常用的位运算例子:
位运算,顾名思义:是通过把数转换成二进制,然后通过操作他们的位置进行运算;
1,左移(<<)运算符
32位中最右边也就是位31,是不能进行移动的,它是作为符号标志,数值左移n位:是指当前的数字乘以2的n次幂
.乘以2运算
- int mulTwo(int n){//计算n*2
- return n << 1;
- }
乘以2的m次方
- int mulTwoPower(int n,int m){//计算n*(2^m)
- return n << m;
- }
计算2的n次方
- int getFactorialofTwo(int n){//n > 0
- return 2 << (n-1);//2的n次方
- }
2,右移(>>)运算符
求两个整数的平均值
- int getAverage(int x, int y){
- return (x + y) >> 1;
- }
除以2运算
- int divTwo(int n){//负奇数的运算不可用
- return n >> 1;//除以2
- }
除以2的m次方
- int divTwoPower(int n,int m){//计算n/(2^m)
- return n >> m;
- }
3,非(~)运算符
涉及到n+1,或者是求一个数的相反数,都应该首先想到非运算符,它本身的运算就相当于一个数的相反数减去1;
计算n+1
3,与或(^)运算符
不用临时变量交换两个数
- a ^= b;
- b ^= a;
- a ^= b;
4,与(&)运算符
判断一个数的奇偶性
- boolean isOddNumber(int n){
- return (n & 1) == 1;
- }