获取byte的各个bit值_Java中获取一个Byte 的各个Bit的值
在介绍具体方法之前,首先介绍两个概念:位(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的值相关推荐
- java获取系统时间并显示时区_JAVA中获取当前系统时间
转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输出: 1 importjav ...
- java int byte数组_Java 中int与byte数组转换详解
1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...
- java byte转int原理_java中int与byte数组互转代码详细分析
在java中,可能会遇到将int转成byte[]数组,或者将byte[]数组转成int的情况.下面我们来思考下怎么实现? 首先,分析int在java内存中的存储格式. 众所周知,int类型在内存中占4 ...
- WEB自动化(5)获取网站验证码即从验证码截图中获取图片中的字符串
WEB自动化(1)环境安装及打开浏览器实例 WEB自动化(2)常用的元素定位方法之xpath详解 WEB自动化(3)PO设计模式原理与实现 WEB自动化(4)使用selenium将网站验证码截图保存为 ...
- java 获取下拉框的值_java中怎么获取下拉框的值
展开全部 JComboBox有一个getSelectedItem()的方法得到选择的值和一个getSelectedIndex()得到选择值的索引.636f70793231313335323631343 ...
- java 不知道类名_Java 中获取类名的三种方法,你知道几种?
之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...
- java默认值_Java中八种基本数据类型的默认值
通过一段代码来测试一下 8种基本数据类型的默认值 package dierge; public class Ceshi { int a; double b; boolean c; char d; fl ...
- java修改list中对象的值_Java中List集合的一点总结
为什么要用接口引用指向实现类的对象? 这种写法其实java多态的表现形式 多态的定义: 指允许不同类的对象对同一消息做出响应. 即同一消息可以根据发送对象的不同而采用多种不同的行为方式. (发送消息就 ...
- java获取文件大小_Java中获取文件大小的详解及实例代码
Java 获取文件大小 今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法:另外一种是使用FileInputStream的available()方法, ...
最新文章
- 智源沙龙:人工智能的技术发展与投资
- html编写app页面代码,编写html页面代码需要了解的--综合编
- Windows 2008 R2+iis7.5环境下Discuz!X3论坛伪静态设置方法
- HoloLens开发入门
- perl 远程 mysql_perl联接mysql
- 转 OFBiz 菜单组件(menu-widget)指引
- Linux 用户组相关命令
- mysql 当前时区_如何获取MySQL的当前时区?
- OpenShift 4 Tekton (3) - 通过控制台的图形化方式配置Tekton Pipeline
- python 归纳 (二二)_多进程数据共享和同步_管道Pipe
- QWT6.0.1+win7下安装说明
- 支付宝认错,回应央行 18 万行政罚单!
- 测试的第一重境界:围着Bug转
- 非参数统计——第二章 单样本问题
- 物理层-宽带接入技术
- 0ctf Babyheap 2017
- ChucK初步(10)
- Python人脸微笑识别2-----Ubuntu16.04基于Tensorflow卷积神经网络模型训练的Python3+Dlib+Opencv实现摄像头人脸微笑检测
- 为什么计算机关机慢,开机为什么慢?电脑开机速度慢的原因
- 人工智能医疗检测:微核细胞情况自动检出率可达90%
热门文章
- 综保参数如何设定_FANUC主轴速度怎么去设定限制?
- SpringBoot+Redis 搞定搜索栏热搜、不雅文字过滤功能
- SpringBoot + Mybatis-puls + ClickHouse增删改查入门教程
- Lipo移除ORC架构
- Unity UGUI实现鼠标拖动图片
- B/S开发框架Web安全问题及防范规范之挂马和WebShell
- Jenkins与代码上线解决方案
- linux 定时任务 (php)
- 2017《面向对象程序设计》课程作业七
- Codeforces 432D Prefixes and Suffixes(KMP+dp)