美文网首页
【Java】进制之间的转换(二)

【Java】进制之间的转换(二)

作者: Sraindy | 来源:发表于2019-08-22 12:04 被阅读0次

Byte说明:

来源:https://blog.csdn.net/leo_eight/article/details/52724620
在Java里byte类型是占用1个字节,即8位的,而16进制的字符占用4位,所以1byte可以用两个字符来表示。
实例:
 byte a = 123  用二进制表示:0111 1011
      每4位用字符表示:  7  b
解析:
byte a = 123; // 这样定义,这个 123 到底是二进制,还是10进制,还是 X 进制,系统是不知道的。在这里,123 默认被当作 10 进制。
Java 不支持显式输入二进制,默认为 10 进制,0 开头为8进制,比如 01111,0x开头为16 进制,比如 0x11。byte 数据类型所表示的范围为 -128~127。

String类型的字符串转成用十六进制表示

  1. 将String类型内容转成byte[],如下所示
    String srcStr = "333";
    srcStr.getBytes()---------->结果是:[51, 51, 51]

  2. 将[51, 51, 51]转成用十六进制表示
    [51, 51, 51] ------>[3, 3, 3, 3, 3, 3]

注意点:
小写字符:{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f' }
大写字符:{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D','E', 'F' }
(1)三个51是保存在byte数组里的
(2)51 是十进制
(3)将51转成十六进制:小写字符[(0xF0 & 51) >>> 4 ]得到的是高位的3
小写字符[0x0F & 51] 得到的是低位的3
即一个字节的(51) 用两个十六位来表示
得到的3 3保存在byte数组中

  1. 将[3, 3, 3, 3, 3, 3]转成string输出 最后输出333333
    String out = new String([3, 3, 3, 3, 3, 3])

将十六进制的字符串转成byte字节数组

例如"4161" 转成 "Aa"

  1. 将"4161"转成char数组 [4, 1, 6, 1] : 即str.toCharArray()
  2. 将[4, 1, 6, 1]中的每个字符先判断是否符合十六进制字符,符合,就将每个字符转成的十进制
    int digitH = Character.digit(4, 16) ---->4
    int digitL = Character.digit(1, 16) ---->1
    digitH左移4为 digitH << 4 ----> 64
  3. int out = (digitH << 4) | digitL ------>65
  4. byte[i] bytestr = out
    变成String输出 : new String(bytestr)

Java的左移和右移

左移:<<

左移一位相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

比如 
10 << 1 = 10 * 2^1 = 20 
10 << 3 = 10 * 2^3 = 80 
带符号左移:

左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充。

比如
正数: 
int a = 5 ; 
int b = a << 2 ; 
[ 0000 0000 0000 0000 0000 0000 0000 0101 ] 5的补码 
[ 0000 0000 0000 0000 0000 0000 0001 0100 ] 对于正数而言,反码就是原码,即 20

负数: 
int a = -5 ; 
int b = a << 2 ; 
[ 1000 0000 0000 0000 0000 0000 0000 0101 ] -5的原码 
[ 1111 1111 1111 1111 1111 1111 1111 1010 ] -5的反码 
[ 1111 1111 1111 1111 1111 1111 1111 1011 ] -5的补码 
[ 1111 1111 1111 1111 1111 1111 1110 1100 ] a<<2左移2位 
将补码转换成原码就可以得到数值,补码转原码和原码转补码一样,上面说过了。 
[ 1000 0000 0000 0000 0000 0000 0001 0011 ] 
[ 1000 0000 0000 0000 0000 0000 0001 0100 ] 得到a<<2的原码,即 -20
左移n位就相当于乘以2的n次方

无符号的移位只有右移,没有左移。

相关文章

网友评论

      本文标题:【Java】进制之间的转换(二)

      本文链接:https://www.haomeiwen.com/subject/anbgsctx.html