在介绍具体方法之前,首先介绍两个概念:位(bit)和字节(byte)。计算机中以二进制来存储数据,二进制共有两个数:0和1。一个0或一个1即为1位。8位即为一个字节,字节为计算机存储空间的基本计量单位。

一般,一个英文字符或数字占一个字节,一个汉字占2个字节。

在各种语言中,数据类型都占用一定的存储空间,在Java中,各数据类型占用的空间情况如下:

数据类型

字节

数据范围

byte

1个字节(8位)

-128~127 (-27~27-1)

short

2个字节(16位)

-32768~32767 (-215~215-1)

int

4个字节(32位)

-2147483648~2147483647 (-231~231-1)

long

8个字节(64位)

-9223372036854774808~9223372036854774807 (-263~263-1)

float

4个字节(32位)

3.402823e+38 ~ 1.401298e-45

double

8个字节(64位)

1.797693e+308 ~ 4.9000000e-324

Java中数据流的操作很多都是到byte的,但是在许多底层操作中是需要根据一个byte中的bit来做判断!

下面的代码根据byte生成bit值!

package com.test;

import java.util.Arrays;

public class T {

/**

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

*/

public static byte[] getBooleanArray(byte b) {

byte[] array = new byte[8];

for (int i = 7; i >= 0; i--) {

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

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

}

return array;

}

/**

* 把byte转为字符串的bit

*/

public static String byteToBit(byte b) {

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 void main(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));

}

}

输出内容就是各个 bit 位的 0 和 1 值!

根据各个Bit的值,返回byte的代码:

/**

* 二进制字符串转byte

*/

public static byte decodeBinaryString(String byteStr) {

int re, 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;

}

获取byte的各个bit值_Java中获取一个Byte 的各个Bit的值相关推荐

  1. java获取系统时间并显示时区_JAVA中获取当前系统时间

    转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输出: 1 importjav ...

  2. java int byte数组_Java 中int与byte数组转换详解

    1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...

  3. java byte转int原理_java中int与byte数组互转代码详细分析

    在java中,可能会遇到将int转成byte[]数组,或者将byte[]数组转成int的情况.下面我们来思考下怎么实现? 首先,分析int在java内存中的存储格式. 众所周知,int类型在内存中占4 ...

  4. WEB自动化(5)获取网站验证码即从验证码截图中获取图片中的字符串

    WEB自动化(1)环境安装及打开浏览器实例 WEB自动化(2)常用的元素定位方法之xpath详解 WEB自动化(3)PO设计模式原理与实现 WEB自动化(4)使用selenium将网站验证码截图保存为 ...

  5. java 获取下拉框的值_java中怎么获取下拉框的值

    展开全部 JComboBox有一个getSelectedItem()的方法得到选择的值和一个getSelectedIndex()得到选择值的索引.636f70793231313335323631343 ...

  6. java 不知道类名_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...

  7. java默认值_Java中八种基本数据类型的默认值

    通过一段代码来测试一下 8种基本数据类型的默认值 package dierge; public class Ceshi { int a; double b; boolean c; char d; fl ...

  8. java修改list中对象的值_Java中List集合的一点总结

    为什么要用接口引用指向实现类的对象? 这种写法其实java多态的表现形式 多态的定义: 指允许不同类的对象对同一消息做出响应. 即同一消息可以根据发送对象的不同而采用多种不同的行为方式. (发送消息就 ...

  9. java获取文件大小_Java中获取文件大小的详解及实例代码

    Java 获取文件大小 今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法:另外一种是使用FileInputStream的available()方法, ...

最新文章

  1. 智源沙龙:人工智能的技术发展与投资
  2. html编写app页面代码,编写html页面代码需要了解的--综合编
  3. Windows 2008 R2+iis7.5环境下Discuz!X3论坛伪静态设置方法
  4. HoloLens开发入门
  5. perl 远程 mysql_perl联接mysql
  6. 转 OFBiz 菜单组件(menu-widget)指引
  7. Linux 用户组相关命令
  8. mysql 当前时区_如何获取MySQL的当前时区?
  9. OpenShift 4 Tekton (3) - 通过控制台的图形化方式配置Tekton Pipeline
  10. python 归纳 (二二)_多进程数据共享和同步_管道Pipe
  11. QWT6.0.1+win7下安装说明
  12. 支付宝认错,回应央行 18 万行政罚单!
  13. 测试的第一重境界:围着Bug转
  14. 非参数统计——第二章 单样本问题
  15. 物理层-宽带接入技术
  16. 0ctf Babyheap 2017
  17. ChucK初步(10)
  18. Python人脸微笑识别2-----Ubuntu16.04基于Tensorflow卷积神经网络模型训练的Python3+Dlib+Opencv实现摄像头人脸微笑检测
  19. 为什么计算机关机慢,开机为什么慢?电脑开机速度慢的原因
  20. 人工智能医疗检测:微核细胞情况自动检出率可达90%

热门文章

  1. 综保参数如何设定_FANUC主轴速度怎么去设定限制?
  2. SpringBoot+Redis 搞定搜索栏热搜、不雅文字过滤功能
  3. SpringBoot + Mybatis-puls + ClickHouse增删改查入门教程
  4. Lipo移除ORC架构
  5. Unity UGUI实现鼠标拖动图片
  6. B/S开发框架Web安全问题及防范规范之挂马和WebShell
  7. Jenkins与代码上线解决方案
  8. linux 定时任务 (php)
  9. 2017《面向对象程序设计》课程作业七
  10. Codeforces 432D Prefixes and Suffixes(KMP+dp)