Java中的进制转换

来源:互联网 发布:whatsapp mac版 编辑:程序博客网 时间:2024/06/07 01:42

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

(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->bytepublic 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->intpublic 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