Java学习-二进制基础

一、概念

1.1 常用进制

项目二进制十进制八进制十六进制
基本数字2个:0,110个:0~98个:0~716个: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);
// 结果:张三。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值