获取一个 Byte 的各个 Bit 值

转载自   获取一个 Byte 的各个 Bit 值

1. bit:位
    一个二进制数据0或1,是1bit;
2. byte:字节
    存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45)  即是指 45个字节;
    1 byte = 8 bit
3. 一个英文字符占一个字节;
    1 字母 = 1 byte = 8 bit
4. 一个汉字占2个字节;
    1 汉字 = 2 byte = 16 bit
byte:一个字节(8位)(-128~127)(-2的7次方到2的7次方-1)
short:两个字节(16位)(-32768~32767)(-2的15次方到2的15次方-1)
int:四个字节(32位)(一个字长)(-2147483648~2147483647)(-2的31次方到2的31次方-1)
long:八个字节(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)
float:四个字节(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方,e-45是乘以10的负45次方)
double:八个字节(64位)(1.797693e+308~ 4.9000000e-324

 

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

Java中要根据byte获得bit就要进行一些位操作,不过为了使用我直接给出解决方案,至于位操作的一些内容,回头再说!

  1. package com.test;  
  2. import java.util.Arrays;  
  3. public class T {  
  4.     /** 
  5.      * 将byte转换为一个长度为8的byte数组,数组每个值代表bit 
  6.      */  
  7.     public static byte[] getBooleanArray(byte b) {  
  8.         byte[] array = new byte[8];  
  9.         for (int i = 7; i >= 0; i--) {  
  10.             array[i] = (byte)(b & 1);  
  11.             b = (byte) (b >> 1);  
  12.         }  
  13.         return array;  
  14.     }  
  15.     /** 
  16.      * 把byte转为字符串的bit 
  17.      */  
  18.     public static String byteToBit(byte b) {  
  19.         return ""  
  20.                 + (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)  
  21.                 + (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)  
  22.                 + (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)  
  23.                 + (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);  
  24.     }  
  25.     public static void main(String[] args) {  
  26.         byte b = 0x35// 0011 0101  
  27.         // 输出 [0, 0, 1, 1, 0, 1, 0, 1]  
  28.         System.out.println(Arrays.toString(getBooleanArray(b)));  
  29.         // 输出 00110101  
  30.         System.out.println(byteToBit(b));  
  31.         // JDK自带的方法,会忽略前面的 0  
  32.         System.out.println(Integer.toBinaryString(0x35));  
  33.     }  
  34. }  

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

 

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

  1. /** 
  2.  * 二进制字符串转byte 
  3.  */  
  4. public static byte decodeBinaryString(String byteStr) {  
  5.     int re, len;  
  6.     if (null == byteStr) {  
  7.         return 0;  
  8.     }  
  9.     len = byteStr.length();  
  10.     if (len != 4 && len != 8) {  
  11.         return 0;  
  12.     }  
  13.     if (len == 8) {// 8 bit处理  
  14.         if (byteStr.charAt(0) == '0') {// 正数  
  15.             re = Integer.parseInt(byteStr, 2);  
  16.         } else {// 负数  
  17.             re = Integer.parseInt(byteStr, 2) - 256;  
  18.         }  
  19.     } else {// 4 bit处理  
  20.         re = Integer.parseInt(byteStr, 2);  
  21.     }  
  22.     return (byte) re;  
  23. }  

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.net core中Migration工具使用的交流分享

一、文章参数 开发工具:visual studio 2015 community update 3 .net core tools(preview2) sqlserver2012 express开发环境:win10(版本14393) .net core(版本 1.0.0-preview2-003121)项目名称:AirMusic项目模板&…

BigDecimal类的使用

BigDecimal类的使用 一般常用的数据类型int和double类型但是在项目中我们会使用到大整数的处理类BigDecimal类 它有着自己的加减乘除和比较大小的方法 一、BigDecimal加减乘除的使用 1.加法 BigDecimal num1 new BigDecimal("10"); BigDecimal num2 new BigDe…

经典台词

内容来源:网络,侵删 01.满桌佳肴,你得有好牙;腰缠万贯,你得有命花。 02.赏一路风光,你得走得动;拣一座金山,你得能够拿。 03.垄沟里刨食的是条好汉子,病床上数钱的是个傻…

看了牛客网要发博客才好找工作,发篇冷静一下

看了牛客网要发博客才好找工作,发篇冷静一下

深入浅出 JIT 编译器

转载自 深入浅出 JIT 编译器JIT 简介 JIT 是 just in time 的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速 Java 程序的执行速度。下面,就对该编译器技术做个简单的讲解。 首先,我们大家都知道,通常通过 javac 将程…

org.springframework.uti包下的StringUtils的使用和org.apache.commons.lang包下StringUtils的使用

一、org.springframework.util.StringUtils StringUtils常用方法描述boolean isEmpty(Object str)判断字符串是否为空,如果为nul或者""则返回true,否则返回falseboolean hasLength(CharSequence str)判断字符串是否有长度,字符串不…

ASP.NET Core依赖注入解读amp;使用Autofac替代实现

1. 前言 关于IoC模式(控制反转)和DI技术(依赖注入),我们已经见过很多的探讨,这里就不再赘述了。比如说必看的Martin Fowler《IoC 容器和 Dependency Injection 模式》,相关资料链接都附于文章末…

Java 中的伪共享详解及解决方案

转载自 Java 中的伪共享详解及解决方案1. 什么是伪共享 CPU 缓存系统中是以缓存行(cache line)为单位存储的。目前主流的 CPU Cache 的 Cache Line 大小都是 64 Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变量”,就…

ServletActionContext.getRequest().getSession() 和 ActionContext.getContext().getSession()的区别

ServletActionContext.getRequest().getSession() 和 ActionContext.getContext().getSession() ActionContext.getContext().getSession(); 这个方法获取的session是struts封装过的一个Map类型的session,只能调用put()方法缓存数据。 ServletActionContext.getRe…

弯下腰,拾起你无价的尊严

内容来源于网络,侵删! 很久以前,一位挪威青年男子漂洋过海到了法国,他要报考著名的巴黎音乐学院。 考试的时候,尽管他竭力将自己的水平发挥到最佳状态,但主考官还是没能录取他。 身无分文的青年男子来到学…

在离线环境中发布.NET Core至Windows Server 2008

0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布一下试试。看了下官方给出的发布教程感觉挺详细的了(https://docs.asp.net/en/latest/publishing/iis.html)&…

输入一个英文句子,翻转句子中单词的顺序 例如输入“I am a student.”,则输出“student. a am I”。

package com.atguigu.java; //输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。 //为简单起见,标点符号和普通字母一样处理。 //例如输入“I am a student.”,则输出“student. a am …

Java 父类子类的对象初始化过程

转载自 Java 父类子类的对象初始化过程摘要: Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况。1. 基本初始化过程:对于一个简单类的初始化过程是:static 修饰的模块(static变…

HttpServletRequest中getAttribute()和getParameter()的区别

一、数据据来源不同 HttpServletRequest类有setAttribute()方法,而 没有setParameter()方法get/setParameter是在对你的页面中的表单元素进行操作,获取的是这个表单元素中的值,是某个表单提交过去的数据get/setAttribute是对你页面中自己定义…

使用VS Code开发调试.NET Core 多项目

使用Visual Studio Code(VS Code)开发调试.NET Core和ASP.NET Core 多项目multiple project。 之前讲解过如果使用Visual Studio Code(VS Code) 开发单个.NET Core和ASP.NET Core项目,大家也都知道如何开发。 多项目可能有些人还不大了解,今天给大家介绍…

git 在ssh情况下提交代码

git --version --git版本 用户目录(~/) vim ~/.gitconfig --编辑用户目录(~/)下的 .gitconfig文件 --输入i 进入编辑模式 [user] nameRosen email1091947832qq.com [alias] --配置别名 cocheckout 切换分…

如果你也会C#,那不妨了解下F#(1):F# 数据类型

简单介绍 F#(与C#一样,念作“F Sharp”)是一种基于.Net框架的强类型、静态类型的函数式编程语言。可以说C#是一门包含函数式编程的面向对象编程语言,而F#是一门包含面向对象的函数式编程语言。可以查看官方文档了解更多信息。 本系…

String path = request.getContextPath()和String basePath = request.getScheme()

在JSP当中我们会用此代码来拼接路径&#xff0c;所以此语句是用来拼装当前网页的相对路径的。 <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/&…

Java中的函数传递

转载自 Java中的函数传递在C和C中&#xff0c;函数的传递可以通过函数指针来实现。在C#中&#xff0c;函数传递可以通过委托、Action、Func来实现。Java中没有函数指针、没有委托&#xff0c;那函数要如何传递呢&#xff1f; 可以通过以下两种方式实现。 1、通过handler&#…

使用Nginx搭建图片服务器(windows7)

1.进入官网下载nginx压缩包&#xff0c;解压后目录如下 2.在解压后的conf/nginx.conf配置文件中&#xff0c;添加添加或者修改带有颜色地方的代码 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/e…