`
littcai
  • 浏览: 248214 次
  • 性别: 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

相关推荐

    java 图像处理(模糊处理、锐化处理)

    在Java编程语言中,图像处理是一项重要的功能,可以用于创建、编辑或操作图像。本教程将探讨两个关键的图像处理技术:模糊处理和锐化处理。这些技术在图像分析、图像增强以及艺术创作中有着广泛的应用。 模糊处理是...

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

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

    JAVA中文文档分句工具

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

    java一次性查询处理几百万数据解决方法

    在Java开发中,处理大数据量是常见的需求之一,特别是当数据规模达到几百万级别时,如何高效、稳定地处理这些数据变得尤为重要。本文将详细介绍一种Java一次性查询处理几百万数据的有效方法,并通过具体代码示例进行...

    java安装包(Windows64位)

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

    Java类库中文手册

    这份手册详细介绍了Java标准类库中的各种类、接口、方法和异常,是Java学习者和开发者的得力助手。 在Java编程中,类库是预先编写好的一组类和接口的集合,它们提供了丰富的功能,可以帮助开发者构建高效、稳定的...

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

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

    Java API文档 中文网页版

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

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

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

    Java+OpenCV+OCR 图像字符处理

    在这个过程中,可能会遇到性能优化、多线程处理、异常处理等问题,这些都是Java编程中常见的挑战,需要开发者具备扎实的基础和实践经验。 总之,“Java+OpenCV+OCR 图像字符处理”是一个综合性的项目,涵盖了图像...

    java3D (32位和64位)

    9. **用户交互(User Interaction)**:Java3D支持键盘、鼠标等输入设备的事件处理,使用户能够与3D场景进行交互,例如旋转、平移场景或选择物体。 10. **兼容性**:Java3D可在32位和64位系统上运行,这意味着开发...

    java1.6或者java6 64位 windows

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

    Java处理100万行超大Excel文件秒级响应

    ### Java处理100万行超大Excel文件秒级响应 #### 一、问题背景与需求分析 在项目开发过程中,经常会遇到需要处理大量Excel数据的情况。这些数据可能包括成千上万条记录,每条记录又包含多个字段。传统的处理方式...

    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值

    ElasticSearch Java API 中文文档

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

    java中main方法发送httpPost请求

    这里我们将深入探讨如何在Java的main方法中实现这个功能,以及相关的HTTP请求和响应处理。 首先,Java中发送HTTP POST请求通常会用到`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp。下面我们将...

    java 实现国际化 中英文语言切换

    - 服务器端处理:接收到请求后,更新用户的 Locale 信息,并将新的 Locale 信息保存在会话(Session)或 Cookie 中。 - 重定向或渲染页面:根据新的 Locale 信息,返回相应的资源包并重新渲染页面。 5. **Struts...

    基于java的图像处理源代码

    此文件包含了基于java的图像处理源代码,具体有图像灰度变换、阈值变换、线性变换、伪彩色处理、图像融合、图像合成、内置变换、仿射变换、图像插值、边缘检测、图像分割、hough变换、图像编码、分形演示等等等等,...

Global site tag (gtag.js) - Google Analytics