获取byte的各个bit值_如何获取byte的各个bit值以及常见位操作

本文详细介绍了如何获取byte的各个bit值,并提供了Java实现方法,包括位左移、位右移、与(&)、或(|)、异或(^)等常见位操作的示例。通过对byte进行位操作,可以有效地处理二进制数据,如信号采集板数据解析。
摘要由CSDN通过智能技术生成

项目中通过信号采集板的数据获取车上仪表盘指示灯的信息,将接收到的数据转成byte后,还要将每一个Byte的各个Bit值分离出来,这样才知道每个bit的值代表的具体信息。这里记录下如何获取byte的各个bit值,一些常见的位操作也顺便记录下。

1、分离出一个Byte的各个Bit的值

一个英文字符占一个字节(1字母=1 byte=8 bit),一个汉字占两个字节(1汉字=2 byte=16 bit)。

其中,bit: 位,一个二进制数据0或1,是1bit。

byte:字节,存储空间的基本计量单位,1 byte=8 bit。

byte:1个字节(8位) (-128~127)  (-2^7~2^7-1)

short:2个字节(16位) (-32768~32767)  (-2^15~2^15-1)

int:4个字节(32位) (-2147483648~2147483647)  (-2^31~2^31-1)

long:8个字节(64位) (9223372036854774808~9223372036854774807)  (-2^63~2^63-1)

float:4个字节(32位) (3.402823e+38~1.401298e-45)  (e+是乘以10的38次方,e-45是乘以10 的负45次方)

double:8个字节(64位) (1.797693e~4.9000000e-324)

(1)byte-->bit

public classT {/*** 将byte转换为一个长度为8的byte数组,数组每个值代表bit*/

public static byte[] getBooleanArray(byteb) {byte[] array = new byte[8];for (int i = 7; i >= 0; i--) {

array[i]= (byte)(b & 1);

b= (byte) (b >> 1);

}returnarray;

}/*** 把byte转为字符串的bit*/

public static String byteToBit(byteb) {return ""

+ (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)+ (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)+ (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)+ (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);

}public static voidmain(String[] args) {byte b = 0x35; //0011 0101//输出 [0, 0, 1, 1, 0, 1, 0, 1]

System.out.println(Arrays.toString(getBooleanArray(b)));//输出 00110101

System.out.println(byteToBit(b));//JDK自带的方法,会忽略前面的 0

System.out.println(Integer.toBinaryString(0x35));

}

}

(2)bit-->byte

/*** 二进制字符串转byte*/

public static bytedecodeBinaryString(String byteStr) {intre, len;if (null ==byteStr) {return 0;

}

len=byteStr.length();if (len != 4 && len != 8) {return 0;

}if (len == 8) {//8 bit处理

if (byteStr.charAt(0) == '0') {//正数

re = Integer.parseInt(byteStr, 2);

}else {//负数

re = Integer.parseInt(byteStr, 2) - 256;

}

}else {//4 bit处理

re = Integer.parseInt(byteStr, 2);

}return (byte) re;

}

2、左移和右移

直接举例说明:

(1)左移:3左移2位

|0000 0000  0000 0000  0000 0000  0000 0011

00|0000 0000  0000 0000  0000 0000  0000 1100   空位补0

3<<1=6;3<<2=12;3<<3=24;

由此可看出一个规律:

3x2^1=6;3x2^2=12;3x2^3=24;

(2)右移:6右移2位

0000 0000  0000 0000  0000 0000  0000 0110|

0000 0000  0000 0000  0000 0000  0000 0001|10

空位补0(看最高位,这里最高位为0),负数最高位为1,补1。

总结:<

>>右移:就是除以2的移动的位数次幂。

>>:最高位补什么由原有数据的最高位值而定,补0或1。

>>>无符号右移:无论最高位是什么,右移后都补0。

3、与(&)、或(|)、异或(^)

直接举例说明:

(1)6&3=2;

110             1代表真,0代表假

& 011

010=2

(2)6|5=7;

110

|   101

111=7

(3) 6^5=3;

110

^   101

011=3

再举一个例子: 7^4^4=7;  (一个数异或同一个数两次,结果还是那个数,可以用来数据加密)

111

^   100

011

^   100

111=7

如果此文对您有帮助,微信打赏我一下吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值