`
wode66
  • 浏览: 739459 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

位操作

阅读更多

一、位操作

      如果两个输入位都是 1,则按位“与”操作符(&)生成一个输出位 1;否则生成一个输出位 0。

      如果两个输入位里只要有一个是 1,则按位“或”操作符(|)生成一个输出位 1;只有在两个输入位都是 0 的情况下,它才会生成一个输出位 0。

      如果两个输入位的某一个是 1,但不全都是 1,那么“异或”操作(^)生成一个输出位 1。

      按位“非”(~ ,也称为取补运算,ones compliement operator )属于一元操作符;它只对一个操作数进行操作(其他位操作是二元运算)。按位“非”生成与输入位相反的值——若输入 0,则输出 1;输入 1,则输
出 0。

二、移位操作符(<<、>>和>>>共三种)

       移位操作符操作的运算对象也是二进制的“位”,但是它们只可以被用来处理整数类型(基本类型的一种)。

       1、左移位操作符(<<)能将操作符左边的运算对象向左移动操作符右侧指定的位数(在低位补 0)。(左移一位,相当于乘以2)

       2、“有符号”右移位操作符(>>)则将操作符左边的运算对象向右移动操作符右侧指定的位数。“有符号”右移位操作符使用了“符号扩展”:若符号为正,则在高位插入 0;若符号为负,则在高位插入 1。(右移一位,相当于除以2)

       3、Java 中增加了一种“无符号”右移位操作符(>>>),它使用了“零扩展”:无论正负,都在高位插入 0。这一操作符是 C 或 C++没有的。

       注意:只有三种移位操作符,没有提供<<<移位操作。

三、工具类(该工具可以打印出一个int类型变量的32位值)

public class BinaryUtils {
	public static String binaryIntToString(int i) {
		StringBuffer sb = new StringBuffer();
		for (int j = 31; j >= 0; j--)
			if (((1 << j) & i) != 0)
				sb.append("1");
			else
				sb.append("0");
		return sb.toString();
	}
	public static String binaryLongToString( long l) {
		StringBuffer sb = new StringBuffer();
		for (int i = 63; i >= 0; i--)
			if (((1L << i) & l) != 0)
				sb.append("1");
			else
				sb.append("0");
		return sb.toString();
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics