Java_位操作

 


1. 正数及负数的按位与,按位或和异或操作:

public class Temp {

	public static void main (String args[]) {
		int x = 3;	//3的二进制为00000000 00000000 00000000 00000011
		int y = 6;	//6的二进制为00000000 00000000 00000000 00000110
		System.out.println(x & y);	//输出2
		System.out.println(x | y);	//输出7
		System.out.println(x ^ y);	//位相同为0,不同为1.输出5
		
		x = -3;	//-3的二进制为10000000 00000000 00000000 00000011, 反码为11111111 11111111 11111111 11111100, 补码为11111111 11111111 11111111 11111101
		y = -6;	//-6的二进制为10000000 00000000 00000000 00000110, 反码为11111111 11111111 11111111 11111001, 补码为11111111 11111111 11111111 11111010
		System.out.println(x & y);	//补码与之后为11111111 11111111 11111111 11111000, 反码(补码减1)为11111111 11111111 11111111 11110111, 原码(反码取反,如果第一位为1,则表明是负数,负数符号位不取反)为10000000 00000000 00000000 00001000.因此输出-8
		System.out.println(x | y);	//输出-1
		System.out.println(x ^ y);	//输出7(注意:符号位也进行运算。由于前面29为预算后都为0,所以结果变成正数)
	}
}

2. 正数及负数的取反操作:

public class Temp {
	public static void main (String args[]) {
		int x = 3;	//3的二进制为00000000 00000000 00000000 00000011
		int y = -3;	//-3的二进制为10000000 00000000 00000000 00000011
		System.out.println(~x);	//正数直接按原码取反为11111111 11111111 11111111 11111100,但这是一个负数的补码,因此该负数的反码为11111111 11111111 11111111 11111011,原码为10000000 00000000 00000000 00000100,输出-4
		System.out.println(~y);	//补码为11111111 11111111 11111111 11111101,取反为00000000 00000000 00000000 00000010,输出2
	}
}

3. 正数及负数的左移位操作:右边补0

public class Temp {
	public static void main (String args[]) {
		int x = 3;	//3的二进制为00000000 00000000 00000000 00000011
		int y = -3;	//-3的二进制为10000000 00000000 00000000 00000011
		System.out.println(x<<2);	//左移位后为00000000 00000000 00000000 00001100,输出12
		System.out.println(y<<2);	//补码为11111111 11111111 11111111 11111101,左移位后为11111111 11111111 11111111 11110100,这是一个负数的补码,还要转成原码为10000000 00000000 00000000 00001100,输出-12
	}
}

4. 正数及负数的右移位操作:左边补跟符号位一样的数字

public class Temp {
	public static void main (String args[]) {
		int x = 3;	//3的二进制为00000000 00000000 00000000 00000011
		int y = -3;	//-3的二进制为10000000 00000000 00000000 00000011
		System.out.println(x>>2);	//右移位后为00000000 00000000 00000000 00000000,输出0
		System.out.println(y>>2);	//补码为11111111 11111111 11111111 11111101,右移位后为11111111 11111111 11111111 11111111,这是一个负数的补码,还要转成原码为10000000 00000000 00000000 00000001,输出-1
	}
}

5. 正数及负数的无符号右移位操作:左边都补0

public class Temp {
	public static void main (String args[]) {
		int x = 3;	//3的二进制为00000000 00000000 00000000 00000011
		int y = -3;	//-3的二进制为10000000 00000000 00000000 00000011
		System.out.println(x>>>2);	//右移位后为00000000 00000000 00000000 00000000,输出0
		System.out.println(y>>>2);	//补码为11111111 11111111 11111111 11111101,右移位后为00111111 11111111 11111111 11111111,输出1073741823
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值