码迷,mamicode.com
首页 > 编程语言 > 详细

Java的位运算

时间:2014-10-29 23:58:27      阅读:424      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   ar   java   sp   数据   div   

左移位操作


左移位运算的符号为【<<】,左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。

左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:【a << n】运算的过程是通过将a的所有位都左移n位,每左移一个位,左边的最高位上的0或1被移出丢弃,并用0填充右边的低位

注意:

  1. 如果a是byte、short或int型数据,总是先计算出n%32的结果m,然后进行a<<m运算
  2. 对于long型数据,总是先计算出n%64的结果m,然后进行a << m运算

右移位操作

右移位运算的符号为【>>】,右移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。

右移位运算时双目运算符,操作元必须是整型类型的数据,其移动过程是:【a >> n】运算的过程是通过将a的所有位都右移n位,每右移一个位,右边的最低位上的0或1被移出丢弃,并用0或1填充左边的高位【a是正数时用0填充,负数时用1填充】

注意:

  1. 如果a是byte、short或int型数据,总是先计算出n%32的结果m,然后进行a<<m运算
  2.  对于long型数据,总是先计算出n%64的结果m,然后进行a << m运算
/**************************************华丽的分割线性**************************************************/
      以下为常用的比特位操作
/****************************************************************************************************/
public class BitUtil {
    
    public static int alterBitValue(int source,int pos,boolean zero) {
        if(zero) { /**source的第pos比特位置为0*/
            return source & Integer.MAX_VALUE ^ (1 << pos -1);
        }
        /**source的第pos比特位置为1*/
        return source | (1 << pos -1);
    }
    
    public static int getBitValue(int source,int pos) {
        /**保留source第pos位的比特值,其余为置为0*/
        source = source & (Integer.MAX_VALUE & (1 << pos -1));
        source = source >> pos -1;
        if(source == 1) 
            return 1;
        return 0;
    }
    
    public static void main(String []args) {
        /**结果应为4*/
        System.out.println(BitUtil.alterBitValue(6, 2, true));
        /**结果应为19*/
        System.out.println(BitUtil.alterBitValue(3, 5, false));
        /**结果应为0*/
        System.out.println(BitUtil.getBitValue(5, 2));
        /**结果应为1*/
        System.out.println(BitUtil.getBitValue(5, 3));
    }
    
}

 

Java的位运算

标签:style   blog   color   os   ar   java   sp   数据   div   

原文地址:http://www.cnblogs.com/hanfight/p/4060886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!