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,相同为000000000 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
- Java中的进制转换
- java中的进制转换
- java中的进制转换
- java中的进制转换
- JAVA中的进制转换
- JAVA中的进制转换
- Java中的进制转换
- Java中的进制转换
- Java中的进制转换
- Java中的进制转换
- java中的进制转换方法
- Java中的进制转换,练习
- java中的进制转换问题
- Java中的进制转换方法
- JAVA中的进制转换问题
- Java中的类型转换和进制转换
- java中的进制转换及转换函数
- java进制转换在数组中的体现
- java.util.concurrent解析——FutureTask源码解析
- 深度学习的分布式训练
- Java异常throw与throws的区别
- CodeForces
- ResultSet相关ResultSetMetaData详细
- Java中的进制转换
- CMD命令操作MySql数据库,操作详解
- 7.14-7.16
- Android Wi-Fi connect & auto connect流程分析(Android 7.0)
- spring RequesBody和ResponseBody报错的问题
- Seaweedfs基本操作
- 程序员面试金典:数组--像素翻转、清除行列
- java.util.concurrent解析——ThreadPoolExecutor源码解析
- 关注民生民情——华北水利水电大学“情艺”国情社情调查团