Java中的进制转换

首先介绍二进制的位运算:

(1)按位与  &

00000000 00000000 00000000 00000000  & 11111111 11111111 11111111 11111111

结果:00000000 00000000 00000000 00000000

(2)按位或 |

 

00000000 00000000 00000000 00000000  & 11111111 11111111 11111111 11111111

结果:11111111 11111111 11111111 11111111 

(3)异或 ^   不同为1,相同为0

 

00000000 00000000 00000000 00000000  & 11111111 11111111 11111111 11111111

结果:11111111 11111111 11111111 11111111 

(4)取反 ~

00000000 00000000 00000000 00000000  取反  11111111 11111111 11111111 11111111

(5)左移运算 <<

对于正数:左丢弃,右补0  相当于在原10进制数  每移动一位 *2

00000000 00000000 00000000 00000010 (2) << 2 =00000000 00000000 00000000 00001000(2*2*2=8)

(6)右移运算 >>

对于正数:右丢弃,左补0  相当于在原10进制数  每移动一位 /2

00000000 00000000 00000000 00001000(8) >>2=00000000 00000000 00000000 00000010 (8/2/2=2)

(7)无符号右移 >>>  对于正负数都一致:右丢弃,左补0

关于负数的左右移:左移:左丢弃,右补0;右移;右丢弃,左补1;

例如-8>>2

首先,负数二进制是以其正值的补码形式表示。

           补码=反码+1;

-8,其正值二进制 为: 00000000 00000000 00000000 00001000

                                  反码 :11111111 11111111 11111111 11110111

                              补码= 反码+1:11111111 11111111 11111111 11111000

                            然后右移2位:11111111 11111111 11111111 11111110 (这个二进制负数就是要求得的值,得把它转为十进制形式)

                            反码=补码-1:11111111 11111111 11111111 11111101

                               取反码 : 00000000 00000000 00000000 00000010

                               得到十进制加负号 :-2

*************************************************************************************************************************************************************

接下来,介绍Java里进制转换

java中的基本数据类型:byte(8bit);short(16bit);int(32bit);long(64bit)

java中十进制转化为其他进制:

Integer.toBinaryString(100);//二进制
Integer.toHexString(100);//十六进制
Integer.toOctalString(100);//八进制

java其他进制转为十进制:

Integer.parseInt("二进制",2);

Integer.parseInt("八进制",8);

Integer.parseInt("十六进制",16);

 

接下来附上Java十进制数据转为二进制字节数组和二进制字节数组转为十进制数据的代码:

 

        //int->byte
	public byte[] IntToByte(int a){
		//int 32bit;byte 8bit;所以每八位转换一个byte,byte[]里4个元素
		byte[] byte1 = new byte[4];
		for(int i=0;i<byte1.length;i++){
			//每次取八位,从低位到高位,与0xff(11111111)做位运算&,最强转成byte类型
			byte1[i]=(byte)((int)(a>>(i*8))&0xff);	
		}
		System.out.println("["+byte1[0]+","+byte1[1]+","+byte1[2]+","+byte1[3]+"]");
		return byte1;
	}
	//byte->int
	public int ByteToInt(byte[] byte1){
		int a = 0;
		for(int i =0;i<byte1.length;i++){
			//0xff(11111111)做位运算&,左移i*8位;
			 a += (int)(byte1[i]&0xff)<<(i*8);        
		}
		return a;
	}
public static void main(String[] args) {
    Test test = new Test();
    byte[] byte1 = test.IntToByte(6788);
	System.out.println(test.IntToByte(6788));
	System.out.println(test.ByteToInt(byte1));


}


打印结果:
[-124,26,0,0]
[-124,26,0,0]
[B@3a5476a7
6788

 

最近在整理一些资源工具,放在网站分享 http://tools.maqway.com
欢迎关注公众号:麻雀唯伊 , 不定时更新资源文章,生活优惠,或许有你想看的

 

                            

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值