一、位操作
如果两个输入位都是 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();
}
}