`
tuhaitao
  • 浏览: 379223 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java位运算的优势

    博客分类:
  • java
阅读更多

在Java中对数据的运算,有很好的规范支持,尤其是针对二进制的位运算,解决了C/C++ 逻辑右移 于 算术右移的不确定性,几乎所有市面上见到的C/C++编译器都只对有符号数使用算术右移,Java在这方面作的比C/C++出色。

 

这里我用一个经典的1,-1的移位运算码来展示:

 

 

package com.opencfg.test;

/**
 * Integer Binary Test
 *  
 * @author opencfg.com
 * @version 
 */
public class Test {
	
	final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

	public static void log(final String message) {
		System.out.println(message);
	}

	/**
	 * 这里扩展了JDK开源代码里自带的private方法toUnsignedString ,打印出0字符
	 * 
	 * @param i
	 * @param shift
	 * @return
	 */
	public static String toUnsignedStringEx(int i, int shift) {
		char[] buf = new char[Integer.SIZE];
		int charPos = Integer.SIZE;
		int radix = 1 << shift;
		for(int mask = radix - 1, count = Integer.SIZE; i != 0 || count > 0; i >>>= shift, count--) {
			buf[--charPos] = digits[i & mask];
		}
		return new String(buf, charPos, (Integer.SIZE - charPos));
	}
	
	
	public static void main(String[] args) {
		// 1111 1111 1111 1111 1111 1111 1111 1111
		int a = -1;
		// 0000 0000 0000 0000 0000 0000 0000 0001
		int b = 1;
		
		log("int size: " + Integer.SIZE);
		log("a       : " + toUnsignedStringEx(a, 1));
		log("b       : " + toUnsignedStringEx(b, 1));
		
		log("a << 3  : " + toUnsignedStringEx((a << 3), 1));
		log("b << 3  : " + toUnsignedStringEx((b << 3), 1));
		
		log("a << 35 : " + toUnsignedStringEx((a << 35), 1));
		log("b << 35 : " + toUnsignedStringEx((b << 35), 1));
		
		log("a >> 3  : " + toUnsignedStringEx((a >> 3), 1));
		log("b >> 3  : " + toUnsignedStringEx((b >> 3), 1));
		
		log("a >> 35 : " + toUnsignedStringEx((a >> 35), 1));
		log("b >> 35 : " + toUnsignedStringEx((b >> 35), 1));
		
		log("a >>> 3 : " + toUnsignedStringEx((a >>> 3), 1));
		log("b >>> 3 : " + toUnsignedStringEx((b >>> 3), 1));
		
		log("a >>> 35: " + toUnsignedStringEx((a >>> 35), 1));
		log("b >>> 35: " + toUnsignedStringEx((b >>> 35), 1));
		
	}

}
 

 

执行结果如下:

 

 

int size: 32
a       : 11111111111111111111111111111111
b       : 00000000000000000000000000000001
a << 3  : 11111111111111111111111111111000
b << 3  : 00000000000000000000000000001000
a << 35 : 11111111111111111111111111111000
b << 35 : 00000000000000000000000000001000
a >> 3  : 11111111111111111111111111111111
b >> 3  : 00000000000000000000000000000000
a >> 35 : 11111111111111111111111111111111
b >> 35 : 00000000000000000000000000000000
a >>> 3 : 00011111111111111111111111111111
b >>> 3 : 00000000000000000000000000000000
a >>> 35: 00011111111111111111111111111111
b >>> 35: 00000000000000000000000000000000
 

 

计算机存储数字是以二进制补码表示, 逻辑右移 (>>>) 将高位补0,低位顺序移出, 算术右移(>>) 将延续高位的符号位,负数补1,整数补0, 低位顺序移出。

 

Java中关键的标准在 ,对于一个由w位组成的数据类型, 如果要移动 k >=w 位时, 会采用 k mod w 来作标准移位。

 

这对于一些C/C++ 编译器来说很难做到。

 

从一些很小的语言细节,不难看出sun公司的风格,的确是那句经典的一流公司作标准,二流公司作应用。

 

 

 

 

 

分享到:
评论

相关推荐

    java位运算1.pdf

    虽然现代编译器和硬件在很多情况下可以自动优化,但在特定情况下,位运算仍然能提供性能优势。例如,位运算常用于位掩码操作,通过设置或清除特定位来控制某个特性或状态。此外,位运算还可以用于节省内存空间,例如...

    java位运算符之&AND操作视频

    2. **高效计算**:位运算比算术运算在速度上有优势,特别是在处理大量数据时。 3. **位标志检查**:如果某个位代表一个标志或状态,通过AND运算可以检查该位是否设置为1。 视频"java位运算符&AND操作视频.exe"可能...

    [宫水三叶的刷题日记]:位运算1

    在编程领域,位运算是一种非常基础且强大的工具,尤其在处理效率和空间优化方面有着显著的优势。本文将探讨位运算的基础知识以及如何在LeetCode的刷题过程中有效地使用位运算来解决实际问题。 位运算主要涉及到对二...

    C#和Java矩阵相乘运算性能比较

    特别是当矩阵尺寸较大时,Java的优势更为明显。这可能是因为Java的垃圾回收机制以及JIT(Just-In-Time)编译器的优化技术能够更好地适应这类计算密集型任务。 #### 性能比较分析 - **内存管理**:Java采用自动垃圾...

    7.多线程__阶乘_java_阶乘运算_西南科技大学_多线程_

    7. **性能分析**:讨论多线程阶乘运算相对于单线程的优势,可能涉及CPU利用率、并行计算的概念和实际性能提升。 这个实验不仅帮助学生理解多线程的基本概念,还能让他们掌握在实际项目中应用并发技术解决计算密集型...

    java-16位内存数据转化为double型

    从给定的代码片段来看,这...在Java中,可以利用`java.nio.ByteBuffer`类的便利性,而C++则可能需要更细致的手动控制,如直接操作二进制位和使用位运算。两种方法各有优势,选择哪种取决于具体的应用场景和个人偏好。

    Java右移运算与除法的速度对比

    在Java编程语言中,执行运算的速度对于性能敏感的应用程序至关重要。本文主要探讨了两种不同的整数操作:右移运算和除法运算,并通过一个简单的测试程序来比较它们的执行效率。测试结果显示,对于大规模的数据(如...

    第11章 编译预处理、位运算及混合编程1

    在IT领域,编程是核心技能之一,而深入理解编译预处理、位运算以及混合编程的概念对于提升编程效率和代码质量至关重要。本章主要探讨这三个主题,并通过选择题、填空题和判断题的形式帮助学习者巩固相关知识。 首先...

    C转java工具

    比如,C语言中的位运算、inline函数、预处理器宏等可能需要人工干预才能在Java中实现相同的功能。因此,尽管这个工具宣称“基本可用”,在实际使用时仍需要根据具体情况对转换结果进行审查和调整。 在项目实践中,...

    java选择题库.pdf

    12. Java中的位运算:Java支持位运算符,如按位与(&)、按位或(|)、按位非(~)等,用于操作整数类型的基本数据。 13. Java中的逻辑运算符:逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!),它们用于操作布尔值。 ...

    Java实现文件加密工具 附源码

    总的来说,这个Java实现的文件加密工具是一个结合了位运算和异或操作的实用程序,提供了多样化的加密方式,适用于不同层次的用户需求。它不仅教育用户关于基本的加密原理,也为实际项目提供了安全数据保护的解决方案...

    java 最终仿windows标准计算器 英杰

    总的来说,这个项目涵盖了Java GUI编程、Swing组件使用、事件处理、算术运算逻辑实现等多个方面的知识。对于学习Java编程和GUI设计的人来说,这是一个很好的实践项目,可以帮助他们提升技能并理解如何将抽象的代码...

    java 小学生算数测试系统

    总的来说,这个Java实现的小学生算术测试系统充分利用了Java的技术优势,实现了从用户登录、权限管理到教学互动的一体化流程。其设计思路清晰,功能完善,是教育信息化的一个良好实践。对于开发者来说,这样的系统...

    Python-Leetcode的Python和JAVA解决方案

    4. 位运算:Java的位运算在解决某些特定问题(如“无重复字符的最长子串”)时能发挥独特优势,提供高效解决方案。 三、Python与Java的比较 在LeetCode中,Python和Java各有优势。Python更适合快速原型开发和测试...

    浅析Java语言在计算机软件开发中的应用.pdf

    Java语言的运算符包括赋值运算符、关系运算符、算数运算符、逻辑运算符、条件运算符、位运算符和位移运算符七种。Java语言的运算符可以操作常量与变量,Java语言的运算符对编程表达形式有各自特别的要求。在运算时...

    用java实现bit-vector的功能

    在Java中实现Bit-Vector可以帮助我们处理大量布尔值或者整数的集合,尤其在空间效率和查找速度上有着显著优势。下面将详细介绍如何在Java中实现Bit-Vector及其相关知识。 首先,理解Bit-Vector的基本概念。Bit-...

    javaSWT简易计算器

    本项目“javaSWT简易计算器”利用SWT来构建一个基本的计算器应用,能够执行基本的数学运算,包括加、减、乘、除以及处理小数。下面我们将深入探讨SWT库、计算器的设计和实现,以及如何在Java中处理数学运算。 1. **...

    java g711编解码程序

    3. **Java实现的优势**: - **跨平台兼容性**:Java程序可以在任何支持Java虚拟机(JVM)的操作系统上运行,无需重新编译。 - **可读性和维护性**:Java语法简洁,使得代码更易理解和修改。 - **丰富的类库**:...

    java版全民飞机大战

    首先,我们要理解的是Java语言在游戏开发中的优势。Java作为一种跨平台的语言,具有优秀的可移植性,使得游戏可以在不同操作系统上运行。同时,Java的垃圾回收机制和丰富的类库为游戏开发提供了便利。 1. **多线程...

    工厂模式(四则运算)

    总结,工厂模式在四则运算中的应用展示了其在简化代码结构、提高代码复用性和扩展性方面的优势。通过定义运算接口和具体的运算类,以及创建一个根据需求返回运算对象的工厂,我们可以轻松地处理不同类型的运算,同时...

Global site tag (gtag.js) - Google Analytics