`
littcai
  • 浏览: 249297 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

Java中的位处理(bitsValue)

    博客分类:
  • Java
阅读更多

      在做网络协议的时候,为了节省流量,通常会把一些简短的业务数据整合到一个字节中,以二进制形式用1位或几位表示。如6、7位代表valueA,而第5位到第3位代表valueB,剩下3位代表valueC。如何在Java中有效的提取出需要的数据呢?

      Java中的基础数据类型和包装类型中都没有bit这个对象,因为Java中拥有位运算符,通过组合这些运算符即可实现位操作。然而位提取却不那么简单。首先Java中的byte是8位带符号整数,最高位为符号位;其次二进制在Java中是以补码表示的,对于负数的话会有空位被1填充的情况。

      原理:对需要截取的位与1,则还是原值;对不需要截取的位与0,则结果为0。最后左移将空位移除,则剩余的值即为需要截取的值。

最终的位处理算法如下:

    /**
     * 截取字节某几位的值.
     * 主要用于1个字节转换后的二进制代码每一位或几位代表一个业务含义。
     * 如截取字节值为5,二进制为0000 0101,其中从第2位到第1位在一起代表一个值,截取后为10,转换整型后为2
     * 
     * @param b 字节
     * @param begin 开始位置(最高位计7)
     * @param end 结束位置
     * 
     * @return 截取后的值
     */
    public static int getBitsValue(byte b,int begin,int end)
    {
    	if(begin>7||end<0||end>begin)
    		throw new IllegalArgumentException();
    	
    	//byte在位移时将转换为int型处理
    	if(b==0)
    		return 0;
    	else
    	{
//    		int and = 0;
//    		for(int i=begin;i>=end;i--)
//    		{
//    			and += 1 << i;	    			
//    		}
    		int and = (2 << begin) - (1 << end);	//优化后的算法,不用循环     		
    		return (b & and) >> end;	    	
    	}    	
    }

 

 

PS:其中有等比数列求和算法,原先采用循环方式,后优化算法;但实际测试性能没有差异,奇怪?!

PS2:如有更优方法请不吝赐教...

 

2009-03-12

1、对负数的处理有误,已修正

1
0
分享到:
评论
2 楼 littcai 2009-03-05  
总不能一个8位的BIT用8个boolean表示吧?那INT型更不得了了
1 楼 Jonney 2009-03-05  
boolean等同于bit

相关推荐

    java7 32位版

    在提供的压缩包中,"java7 32λ.exe"可能是Java 7 32位版的安装程序。下载并安装这个执行文件后,用户可以在32位Windows系统上设置和运行Minecraft服务器。确保服务器配置正确,包括指定适当的内存分配、设置启动...

    JAVA_API1.6文档(中文)

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    Java JDK 17 (32位Windows系统)

    对于Windows 32位系统用户来说,选择JDK 17意味着他们可以在32位环境中享受到最新的Java开发功能。然而,值得注意的是,32位系统有内存限制(通常为4GB),可能会影响大型应用的性能。因此,在开发和运行资源密集型...

    java图片处理工具类JAR包 java-image-scalingjar

    java图片处理工具类JAR包 java-image-scalingjar

    JAVA中文文档分句工具

    Java中文文档分句工具是一款专为处理英文文本文件设计的应用,它主要实现了以下几个核心功能,对于深入理解和使用Java编程语言处理文本数据具有重要的实践意义。 首先,该工具能够按照特定的标点符号对英文文本进行...

    java安装包(Windows64位)

    在64位版本中,JVM可以利用更多的内存,适合处理大型数据或内存消耗大的应用。 3. **Java运行时环境(JRE)**:JRE是运行Java应用程序所必需的环境,它包含了JVM和一些核心类库。JRE是JDK的一部分,但也可以单独...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)...

    AnimatedGifEncoder.java源码(处理GIF图片)

    AnimatedGifEncoder.java源码(处理GIF图片)AnimatedGifEncoder.java源码(处理GIF图片)AnimatedGifEncoder.java源码(处理GIF图片)

    java1.6或者java6 64位 windows

    6. **Java数据库连接(JDBC)**:JDBC 4.0在Java 6中引入,提供自动连接管理、增强的元数据支持和新的SQL语句处理方式,提高了数据库操作的便利性。 7. **Swing和JavaFX**:尽管Java 6的Swing组件已经相当成熟,但...

    Java API文档 中文网页版

    Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、方法和常量的详细说明。这份中文网页版的Java API文档为中国的开发者提供了便利,无需通过英文版本来学习和查找API信息,...

    java 图片旋转、翻转、镜像处理

    在Java编程语言中,处理图像是一项常见的任务,包括图片的旋转、翻转和镜像操作。这些功能在很多场景下都很实用,例如照片编辑、图像处理应用或是网页开发。本篇将详细介绍如何使用Java实现这些功能,并以`ImgRotate...

    java中文排序,数字字母汉字排序

    在Java编程语言中,对包含中文、数字和字母的数据进行排序是一项常见的任务。这个场景下,我们关注的是如何实现一个自定义的排序规则,按照数字、字母和汉字的顺序进行排列。以下是对这一主题的详细解释。 首先,...

    JAVA实现的中文分词程序

    Java实现的中文分词程序是一种基于Java编程语言的文本处理工具,主要应用于处理中文文本,将其拆分成有意义的词汇单元,这一过程被称为分词。在自然语言处理(NLP)领域,分词是预处理阶段的关键步骤,为后续的文本...

    Java 中文入门学习手册合集[chm版]

    第一章 Java语言的产生及其特点 第二章 Java程序开发与运行环境 第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 第六章 Java图形用户接口 第七章 多线程 第八章 Java的"异常" 第九...

    java 语音合成PCM转MP3

    在Java中,可以使用`javax.sound.sampled`包来处理PCM音频,包括读取、写入和转换PCM数据。 3. **音频编码**:从PCM到MP3的转换涉及到音频编码,这是一个将原始PCM数据压缩成更小的MP3文件的过程。通常,我们需要...

    Head First Java 中文高清版pdf

    书中深入浅出地介绍了Java的基础语法,包括变量、数据类型、运算符、流程控制(如if语句、switch语句、循环结构)以及异常处理。这些基础知识是编写任何Java程序的基础,也是理解和解决问题的关键。 接着,书中的...

    java使用fastJson处理复杂Json字符串,直接获取key对应的value值

    java使用fastJson处理复杂Json字符串,直接获取key对应的value值

    Java OCR 图像智能字符识别技术,可识别中文

    在Java环境中,我们可以利用Java的JNI(Java Native Interface)技术,调用C++编写的OCR库,如OpenCV和Tesseract的C++接口,实现高效的图像处理和字符识别功能。 总的来说,Java OCR中文字符识别技术结合了图像处理...

    JAVA运行环境WinXP 32位的版本

    JAVA运行环境WinXP 32位的版本

    ElasticSearch Java API 中文文档

    3. **依赖(Dependency)**: 介绍了如何在Java项目中添加ElasticSearch Java API依赖,特别是推荐使用与ElasticSearch版本号一致的transport版本号。这是使用ElasticSearch Java API前的必要配置。 4. **Java客户端...

Global site tag (gtag.js) - Google Analytics