Java 里的与或运算符,位运算符的简述与总结

Java中有三种移位运算符

<<   左移运算符,num <<1, 相当于 num 乘以2;
>>   右移运算符,num >>1, 相当于 num 除以2;
>>>  无符号右移,忽略符号位,空位都以0不齐;

public class test {

	//静态方法--类方法,不需要创建类对象就可以直接调用
	public static void printInfo(int num){
		System.out.println(Integer.toBinaryString(num));
	}

	public static void main(String[] args) {
		
		int number = 10;
		// number的二进制形式的数
		printInfo(number);
		number = number << 1;
		//左移一位
		printInfo(number);
		number = number >> 1;
		//右移一位
		printInfo(number);
		number = number >>> 1;
		//无符号右移
		printInfo(number);

	}
}

运行结果:

1010     // 十进制:10    原始数            number
10100    // 十进制:20    左移一位          number = number << 1;
1010     // 十进制:10    右移一位          number = number >> 1;
101      // 十进制:5     无符号右移一位     number = number >>> 1;

对于:>>>  无符号右移,忽略符号位,空位都以0补齐

比如 value >>> num     --   num 指定要移位值value 移动的位数。

无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义

Java中的 与(&),或(|),异或(^)取反(~)运算

与运算 &  规则 :都为1时才为1;          或运算 | 规则:有一个为1,则为1;

异或运算  ^ 规则:不同为1;                  取反运算 ~ 规则:按位取反;

例如,用7和9作为 示例:

public class test {
	
	public static void main(String[] args) {

        System.out.println("7 & 9:	"+ (7 & 9));
        System.out.println("7 | 9:	"+(7 | 9));
        System.out.println("7 ^ 9:	"+(7 ^ 9));
        System.out.println("~ 9  :	"+(~ 9));
        System.out.println("~ -9 :	"+(~ -9));
        //0与任意非零整数的异或运算均不变,仍为原数;
        System.out.println("0 ^ 9:	"+(0 ^ 9));	
	}
}

运算结果如下( 7二进制 0111,9二进制 1001):

7 & 9:	1       // 0111 & 1001 = 0001 > 1
7 | 9:	15      // 0111 | 1001 = 1111 > 15
7 ^ 9:	14      // 0111 ^ 1001 = 1110 > 14
~ 9  :  -10
~ -9 :	8       // 较为特殊,
0 ^ 9:	9       // 0000 & 1001 = 1001 > 9
/*
    9 二进制 0000 0000 0000 0000 0000 0000 0000 1001
          *      1111 1111 1111 1111 1111 1111 1111 0110  取反之后变成负数了
          *         1000 0000 0000 0000 0000 0000 0000 1001 补码
          *         1000 0000 0000 0000 0000 0000 0000 1010 原码  == -10

   -9 二进制 1000 0000 0000 0000 0000 0000 0000 1001
          *      1111 1111 1111 1111 1111 1111 1111 0110  负数先转成补码
          *        1111 1111 1111 1111 1111 1111 1111 0111  补码
          *        0000 0000 0000 0000 0000 0000 0000 1000 得到负数的补码之后进行取反 (这时得到的是正数) 8
*/

猜你喜欢

转载自blog.csdn.net/qq_23031939/article/details/82143226
今日推荐