Java学习-二进制基础

一、概念

1.1 常用进制

项目 二进制 十进制 八进制 十六进制
基本数字 2个:0,1 10个:0~9 8个:0~7 16个:0~9和 A~F
进位规则 二进一 十进一 八进一 十六进一
位权 一个数码在不同的位置上所代表的值不同

1.2 表示

例如:20(十进制)
20÷2 = 10~0
10÷2 = 5~0
5÷2 = 2~1
2÷2 = 1~0
1÷2 = 0~1
即10100(二进制)。2^4 + 2^2 = 20

1.3 二进制的位运算

运算符 含义 示例 规则
& 与运算 6 & 3 = 2 全1则1
| 或运算 6 | 3 = 7 有1则1
^ 异或运算 6 ^ 3 = 5 不同则1
~ 反码 ~6 = -7 取反
<< 左移 3 <<2 = 12 ; 322 = 12 左移右补0
>> 右移 3 >>1 = 1 ; 3/2 = 1 右移左补0
>>> 无符号右移 3 >>> 1 = 1 ;3/2 =1

1.3.1 &

6&3 = 2
0000 0110 & 0000 0011 = 0000 0010

1.3.2 |

6|3 = 7
0000 0110 & 0000 0011 = 0000 0111

1.3.3 ^

6^3 = 5
0000 0110 & 0000 0011 = 0000 0101

1.3.4 ~

~6 = -7
0000 0110 = 1111 1001

1.3.5 <<

3 <<2 = 12
0000 0011 = 0000 0110

1.3.6 >>

3 >>1 = 1
0000 0011 = 0000 0001

1.3.7 >>>

3 >>>1 = 1
0000 0011 = 0000 0001

1.4 二进制的补码与原码

1.4.1 原码

定义:一个整数的绝对值大小转换为二进制数。
例如:-14和14。绝对值都为14
二者的原码:0000 1110
二者的反码:1111 0001

1.4.2 补码

定义:一个整数,求反码,再用反码加1,得到的数。
二者的反码:1111 0001 + 1 = 1111 0010

1.4.3 正负整数

正数:以原码形式表示。
即:二进制最高位为0,如0000 1110。14
负数:以补码形式表示。
即:二进制最高位为1,1111 0010。-14

二、JDK内置进制转换

2.1 十进制转其他进制

Integer.toBinaryString(20); // 转为二进制。
Integer.toHexString(20); // 转为十六制。
Integer.toOctalString(20); // 转为八进制。

2.2 其他进制转十进制

Integer.parseInt("00001101",2); // 二进制。
Integer.parseInt("17",8); // 八进制。
Integer.parseInt("A8",16); // 十六进制得。

三、Java中的进制

3.1 数值型转化为字节

// 数值转化字节数组(此处为小端法)
public static byte[] int2Bytes(int id){
  byte[] arr = new byte[4];
  for(int i = 0; i < arr.length; i++){
    arr[i] = (byte)((int)(id >> i * 8) & 0xff);// 其他
  }
  return arr;
  outArray(arr);
}
// 字节数组输出。
public static void outArray(byte[] arr){
  System.out.print("[" + arr[0] );
  for(int i = 1; i < arr.length; i++){
    System.out.print("," + arr[i]);
  }
  System.out.prinln("]");  
} 
// 结果:[-49,31,0,0]。小端法。
// [0,0,31,-49]。大端法。
// 字节数组转化数值。
public static int bytes2Int(byte[] arr){
  int num = 0;
  for(int i = 0; i < arr.length; i++){
    arr[i] = (int)((arr[i] & 0xff)<< i * 8);
  }
  return num;
}

3.2 字符串转化为字节

3.2.1 字符串转化为字节数组

String str = "张三";
byte[] bs = str.getBytes();
for(int i = 0; i < bs.length; i++){
  System.out.println(bs[i]);
}
// 结果:-27 -68 -96-28 -72 -119

3.2.2 字节数组转化为字符串

byte[] bs =new byte[];
String str = new String(bs);
// 结果:张三。

猜你喜欢

转载自blog.csdn.net/lizengbao/article/details/86575165