java 移位运算符,取反运算符 >> << >>> ~ , java 负数补码存放规则等同于机器存储

Java 专栏收录该内容
68 篇文章 0 订阅

移位运算代码如下:

package SimpleGrammar;

/**
 * 
 * @author jaloli
 * 
 * (1)负数存储:java 等同于机器,都是用补码存,补码的规矩,
 * 		   负数 -2 ,原码为				    10000000000000000000000000000010
 * 	     补码是符号位不变,各位取反+1,补码为   11111111111111111111111111111110
 * 
 * (2)负数移位:(说的是 >> << 移位符号,不是>>>,>>  << 这种是带符号移位) 两种移位理解方式,
 * 		   一种是原码移位,再转补码,此时是符号位不变,左移右移都补0
 * 		   另一种是补码直接移位,右移补1,左移补0
 * (3) >>移位方式与除法的区别: -2>>10 = -1,可看下面运算过程第二个printf,也就是和除法不同,
 * 	          你右移多少位,也移不出0来,最多是-1,除法可以 -1 / 2 == 0
 * (4) >>> 是不带符号移位:1.只对64 位存储的二进制数有效.java int 是32 位(如下程序显示),所以移位结果不是期待的数
 * 		  2.移位:这个只有右移,无论正负数,统统右移不补0,移几位,砍掉前多少位,10100>>>2 = 101,然后结果101按照正数来看
 * 		  >>> 作用存疑
 * (5) ~ 取反:取反就是连同符号位一起取反,高位0 扔掉
 */
public class ShiftBit {
	
	public static String printBinary(int number) {
		return Integer.toBinaryString(number);
	}
	
	public static void main(String[] args) {
		int oldValue = -20;  //改成20 看,2,-2 试试
		int shiftNum = 2;
		//oldValue is : 		11111111111111111111111111101100	原数为:-20
		System.out.println("oldValue is : \t\t" + printBinary(oldValue) + "\t原数为:" + oldValue);
		//oldValue >> 2 : 	11111111111111111111111111111011 	运算十进制结果为: -5
		System.out.println("oldValue >> 2 : \t" + printBinary(oldValue >> shiftNum) + " \t运算十进制结果为: " + (oldValue >> shiftNum));
		//oldValue << 2  : 	11111111111111111111111110110000 	运算十进制结果为: -80
		System.out.println("oldValue << 2  : \t" + printBinary(oldValue << shiftNum) + " \t运算十进制结果为: " + (oldValue << shiftNum));
		//oldValue >>> 2  : 	111111111111111111111111111011 		运算十进制结果为: 1073741819   这个相当于把左边的两位砍掉了,没补0,缺位了,移几位缺几位.1073741819 数按照无符号正数算出来的
		System.out.println("oldValue >>> 2  : \t" + printBinary(oldValue >>> shiftNum) + " \t\t运算十进制结果为: " + (oldValue >>> shiftNum));
		//取反操作符,~-2
		System.out.println("oldValue 取反  is : \t\t" + printBinary(~oldValue) + "\t原数为:" + oldValue);
	}
}


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值