Java移位操作

Java中二进制的表示

         计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码, 补码=反码+1。在 二进制里,是用 0 1 来表示正负的,最高位为符号位,最高位为 1 代表负数,最高位为 0 代表正数。

        以Java中8位的byte为例,最大值为:0111 1111,最小值为1000 0001。

        那么根据十进制的数字,我们如何转换为二进制呢?对于正数我们直接转换即可,对于负数则有一个过程。

        以负数-5为例:

        1.先将-5的绝对值转换成二进制,即为0000 0101;

        2.然后求该二进制的反码,即为 1111 1010;

        3.最后将反码加1, 即为:1111 1011

        所以Java中Integer.toBinaryString(-5)结果为11111111111111111111111111111011。Integer是32位(bit)的。


Java移位操作

package com.zxt.base;

/*
 * java移位操作符详解
 * 首先,移位运算符有三种,其操作类型只支持:byte / short / char / int和long五种。
 * <<	:左移运算符,表示将左边的操作数的二进制数据向左移动n位,移动后空缺位以0填充,多余位舍弃。(等同于乘2的n次方)
 * >>	:右移运算符,二进制数据向右移动n位,(等同于除2的n次方)  >>是带符号右移,负数高位补1,正数补0
 * >>>	:无符号右移运算符,不管移动前最高位是0还是1,右移后左侧产生的空位部分都以0来填充。
 */
public class MoveBitTest {

	public static void main(String[] args) {
		int a = 13;
		System.out.println("移动前 a = " + a + ", 二进制表示为:" + Integer.toBinaryString(a));

		int b = a << 2; // a左移两位,相当于a * 2的2次方
		System.out.println("左移后 a = " + b + ", 二进制表示为:" + Integer.toBinaryString(b));

		int c = a >> 2; // a右移两位,相当于a / 2的2次方
		System.out.println("右移后 a = " + c + ", 二进制表示为:" + Integer.toBinaryString(c));

		
		int d = -12;
		System.out.println("移动前 d = " + d + ", 二进制表示为:" + Integer.toBinaryString(d));

		// 带符号右移
		int e = d >> 2;
		System.out.println("带符号右移后 d = " + e + ", 二进制表示为:" + Integer.toBinaryString(e));
		// 无符号右移
		int f = d >>> 2;
		System.out.println("无符号右移后 d = " + f + ", 二进制表示为:" + Integer.toBinaryString(f));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值