程序中位运算的妙用

       程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位运算。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制110,11的二进制是1011,那么6 and 11的结果就是2(0010),它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理,同1为1,其余全为0)。位运算相较于其他计算符来讲,由于是直接使用计算机的方式来处理数据,无疑会被计算机更快的识别处理,提高程序运行速度。

1
~
2
<<、>>
3
&
4
^
5
|
6
&=、^=、|=、<<=、>>=
以上是位运算的优先级和种类。


下面举一些位运算的小例子:
1.&的妙用

 if((n&1) == 1)  
 {  
      System.out.println("n为奇数");     
 }
n&1是n和1做"按位与"运算,1的二进制只有末位是1,所以n&1就是只保留n的末位(二进制).n&1就表示了n的奇偶性.n若为偶数,其二进制表示最后一位一定为0,所以与1相与得0,而奇数则相反,其二进制最后一位一定为1所以与1相与得1,这样就可以判断一个数的奇偶性,而不是使用%2的方法来判断。


2.<< 和 >>的秒用

public class exercise{
    public static void main(String[] args) {
        int i=4;
        int j=6;
        System.out.println(i<<1);
        System.out.println(j>>1);
    }
}
向左移相当于一个数乘2,向右移相当于除2,例如上面的4(省略到只有四位0100),向左移一位,就变成了8(1000),而6(0110),向右移一位则变为了3(0011)。


3^(异或)的妙用

public class exercise3 {
	public static void main(String[] args) {
		int i=-4;
		int j=6;
		boolean isNeg = (i^j)>>>31 == 0;
		if(isNeg)
		{			
			System.out.println("i,j同号");
		}
		else
		{
			System.out.println("i,j异号");
		}
	}
}
异或的规则是同0异1,通常和>>>(无符号右移)搭配使用,>>表示有符号右移,如果该数为正,则高位补0,若为负数,则高位补1;>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。int类型32位,无符号右移31位则只剩下符号位,进行异或便可知道两数是不是同号。而且这样写最大的好处是不需要考虑数值越界的问题。


大概比较常用的有这几个,以后再进行补充。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值