`

位运算

 
阅读更多

在ECMAScript中所有的运算都是64位格式进行存储的,但位运算操作符不直接操作64位的值,而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换成64位。而对于开发过程中,所有的64操作是透明的,所以位运算也就是指的是32位的二进制的运算;

下面的引用一些常用的位运算例子:

位运算,顾名思义:是通过把数转换成二进制,然后通过操作他们的位置进行运算;

 1,左移(<<)运算符

      32位中最右边也就是位31,是不能进行移动的,它是作为符号标志,数值左移n位:是指当前的数字乘以2的n次幂

 

 

.乘以2运算

  1. int mulTwo(int n){//计算n*2   
  2.     return n << 1;  
  3. }  

乘以2的m次方

  1. int mulTwoPower(int n,int m){//计算n*(2^m)  
  2.     return n << m;  
  3. }  

 

 

 

计算2的n次方

  1. int getFactorialofTwo(int n){//n > 0  
  2.     return 2 << (n-1);//2的n次方  
  3. }  

 

 

2,右移(>>)运算符

求两个整数的平均值

[java] view plaincopy
  1. int getAverage(int x, int y){  
  2.         return (x + y) >> 1;   
  3. }  

除以2运算

  1. int divTwo(int n){//负奇数的运算不可用  
  2.     return n >> 1;//除以2  

除以2的m次方

  1. int divTwoPower(int n,int m){//计算n/(2^m)  
  2.     return n >> m;  
  3. }  

3,非(~)运算符

涉及到n+1,或者是求一个数的相反数,都应该首先想到非运算符,它本身的运算就相当于一个数的相反数减去1;

计算n+1

  1. -~n  

计算n-1

  1. ~-n  

 

取相反数

[java] view plaincopy
  1. ~n + 1;  

 

3,与或(^)运算符

不用临时变量交换两个数

[java] view plaincopy
  1. a ^= b;  
  2. b ^= a;  
  3. a ^= b;  

4,与(&)运算符

 

判断一个数的奇偶性

[java] view plaincopy
  1. boolean isOddNumber(int n){  
  2.     return (n & 1) == 1;  
  3. }  

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics