Java位运算——byte数组与int,long,short以及String的转换

本文详细介绍了Java中位运算符的使用,并探讨了byte数组与int、long、short及String之间的转换方法,包括各自的转换步骤和示例代码。
摘要由CSDN通过智能技术生成

一、位运算符

位运算符用来对二进制位进行操作,~,&,|,^分别为取反,按位与与,按位与或,按位与异或运算,如下表实例:

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

进行位运算:

运算符 描述 图解 实例
& 按位与。按位与运算符对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1。 在这里插入图片描述 (A & B) 结果为 60, 二进制为 0011 1100
| 按位或。按位或运算符|比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)。 在这里插入图片描述 (A | B) 结果为 254, 二进制为 1111 1110
^ 按位异或. 按位异或运算符^比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0。 在这里插入图片描述 (A ^ B) 结果为 17, 二进制为 0001 0001
~ 按位取反运算符~对一个操作数的每一位都取反。 在这里插入图片描述 (~A ) 结果为 240, 二进制为 1111 0000
<< 按位左移。左移操作符(<<)将操作数的所有位向左移动指定的位数。 下图展示了11111111 << 1(11111111 左移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。在这里插入图片描述 A << 2 结果为 254, 二进制为 1111 1110
>> 按位右移。右移操作符(>>)将操作数的所有位向右移动指定的位数。 下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。在这里插入图片描述 A >> 2 结果为 127, 二进制为 0111 1111

二、byte数组与int,long,short以及String的转换

基本步骤:
①分析转化和代转化之间位数的关系
②计算偏移量。每次都取最后8位
③把最后8位和0xff进行&操作
④得出结果。

1.byte数组与int转换

1.1 int转byte[]

int占4byte,例如873220774用二进制表示,

00110100 00001100 01001010 10100110

要将int转换成byte数组,则需要用byte[4]来存储。
又可以分为低位在前,高位在后和高位在前,低位在后两种方式。要将上述的int数组用byte数组表示,以低位在前,高位在后为例,则

byte[] a = new byte[4]
a[0] = 10100110;
a[1] = 01001010;
a[2] = 00001100;
a[3] = 00110100;

要将int转换成上面的样式,实现的原理如下图所示
在这里插入图片描述

代码实现


    /**
     * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。 
     *
     * @param value 要转换的int值
     * @return byte数组
     */
    public static byte[] intToBytes(int value) {
   
        byte[] src = new byte[4];
        src[3] = (byte) ((value >> 24) & 0xFF);
        src[2] = (byte) ((value >> 16) & 0xFF);
        src[1] = (byte) ((value >> 8) & 0xFF);
        src[0] = (byte) (value & 0xFF);
        return src;
    }

    /**
     * 将int数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。
     */
    public static byte[] intToBytes2(int value) {
   
        byte[] src = new byte[4];
        src[0] = (byte) ((value >> 24) & 0xFF);
        src[1] = (byte) ((value >> 16) & 0xFF);
        src[2] = (byte) ((value >> 8) & 0xFF);
        src[3] = (byte) (value & 0xFF);
        return src;
    }
1.2 byte[]转int

byte[]转int则是将上面的操作反过来
在这里插入图片描述

代码实现


    /**
     * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序。
     *
     * @param src    byte数组
     * @return int数值
     */
    public static int bytesToInt(byte[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值