`
tuhaitao
  • 浏览: 375399 次
  • 性别: 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公司的风格,的确是那句经典的一流公司作标准,二流公司作应用。

 

 

 

 

 

分享到:
评论

相关推荐

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

    本文对当今最主流的两种编程语言C#和Java进行了对比研究,就其可移植性和运算速度两方面特性作了分析,这样的研究结果有助于更...比较结果说明Java的运算性能更好,而且随着矩阵尺寸的增加,Java在性能方面的优势更加明显。

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.1.1 Java有什么优势? 2 1.1.2 Java在哪儿? 3 1.2 准备好开始Java之旅 3 1.2.1 下载JDK 4 1.2.2 安装JDK 5 1.2.3 配置环境变量 6 1.2.4 测试环境是否安装成功 8 1.2.5 如果失败了怎么办? 9 1.3 让自己的...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.1.1 Java有什么优势? 2 1.1.2 Java在哪儿? 3 1.2 准备好开始Java之旅 3 1.2.1 下载JDK 4 1.2.2 安装JDK 5 1.2.3 配置环境变量 6 1.2.4 测试环境是否安装成功 8 1.2.5 如果失败了怎么办? 9 1.3 让自己的...

    JAVA游戏毕业设计源码与论文

    而Java技术在无线应用方面的优势非常明显: 1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。 2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI); 3. Java...

    一个基于java语言的深度学习工具箱,项目是基于Nd4j做运算,可以使用GPU加速大矩阵

    致力于开发一个基于java语言的深度学习工具箱,项目是基于Nd4j做运算,可以使用GPU加速大矩阵。支持自动微分、动态计算图等。 开发这个的目的在于结合java与pytorch的优势,目前来说还没有一个很易于编程的基于java...

    JAVA面试题最全集

    如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何...

    java基础案例与开发详解案例源码全

    1.2.5 Java在应用领域的优势7 1.3 Java平台的体系结构7 1.3.1 JavaSE标准版8 1.3.2 JavaEE企业版10 1.3.3 JavaME微型版11 1.4 JavaSE环境安装和配置12 1.4.1 什么是JDK12 1.4.2 JDK安装目录和实用命令工具介绍12 ...

    JAVA打飞机游戏毕业设计(源代码+论文).zip

    而Java技术在无线应用方面的优势非常明显: 1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。 2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI); 3. Java...

    整理后java开发全套达内学习笔记(含练习)

    进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...

    java面试题精选

    搜集整理制作成chm格式文件,灰常给力 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,...&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap和Hashtable的区别。

    java 面试题 总结

    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空...

    基于Android平台并行运算机制的密码运算加速方案

    研究Android平台中密码运算加速方法,采用运算并行化的思想,利用Android平台的RenderScript并行运算机制实现大整数乘法...实验结果表明,与Android平台原生的Java大整数运算库相比,该方法在执行时间上具有明显优势。

    基于Java网络聊天室系统的设计与实现

    Java网络聊天室系统的设计与实现 摘要:计算机从出现到现在有了飞速的发展,现阶段的计算机已经不单单是用于进行运算的独立的...而且java自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度。

    基于java的聊天系统的设计于实现

    计算机从出现到现在有速的友展,现阶段的计算机机口里里是用于进行运算的独立的个体了,跟随计算机一同发展的还有互联网技术,...而且 java 自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度

    Java聊天室的设计与实现.docx

    摘要:计算机从出现到现在有了飞速的发展,现阶段...而且java自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度。 在以前,人们获取信息的方式十分单一,通过电视,广播,信件以及人们的口头

    基于Java的标准型计算器设计【开题报告】.doc

    自己编写的基于Java计算器具备以下优势: 1、可维护性强;Java语言具有支持分布式、安全结构中立、可移植性强和多线程等特点 。做一个基于Java的计算器可维护性较强。 2、可升级性强;自己编写的计算器熟悉代码,...

    基于java的聊天室系统设计与实现毕业设计(项目报告+开题报告+答辩PPT+源代码+讲解视频)

    Java网络聊天室系统的设计与实现 计算机从出现到现在有了飞速的发展,现阶段的...而且java自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度。 在以前,人们获取信息的方式十分单一,通过

    毕业设计-基于Java的网络聊天室系统的设计与实现 含毕业论文、答辩PPT.rar

    摘要:计算机从出现到现在有了飞速的发展,现阶段...而且java自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度。 在以前,人们获取信息的方式十分单一,通过电视,广播,信件以及人们的口头

    基于Java+Mysql实现聊天室的设计与实现【论文文档+PPT+数据库+讲解视频】

    计算机从出现到现在有了飞速的发展,现阶段...而且java自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度。 在以前,人们获取信息的方式十分单一,通过电视,广播,信件以及人们的口头相传,

    基于Java的网络聊天室系统的设计与实现 毕业设计论文 毕业设计报告说明书 7k+字 共16页.pdf

    摘要:计算机从出现到现在有了飞速的发展,现阶段...而且java自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度。 在以前,人们获取信息的方式十分单一,通过电视,广播,信件以及人们的口头

Global site tag (gtag.js) - Google Analytics