/**
 * 测试移位运算符<br/>
 * "<<" 左移 : 右侧补0<br/>
 * ">>" 带符号右移 : 左侧补符号位:正数补0,负数补1<br/>
 * ">>>"无符号右移 : 左侧补0<br/>
 */
public class TestShift {
	public static void main(String[] args) {
		testLeftShift();
		testRightShift();
		testUnsignedRightShift();
	}

	/**
	 * 左移: 右侧补0
	 */
	public static void testLeftShift(){
		int num = -8;
		int shift = 2;
		leftShift(num, shift);
		leftShift(-num, shift);
		System.out.println("--------------");
	}
	/**
	 * 左移: 右侧补0
	 */
	public static void leftShift(int num, int shift){
		// num 左移 shift位
		int r = num << shift;
		System.out.println("向左移位: "+ num +" << "+shift);
		System.out.println("移位前:"+binary(num));
		System.out.println("移位后:"+binary(r));
		System.out.println("");
	}
	/**
	 * 测试带符号右移: 左侧补符号位
	 */
	public static void testRightShift(){
		int num = -8;
		int shift = 2;
		rightShift(num, shift);
		rightShift(-num, shift);
		System.out.println("--------------");
	}
	/**
	 * 带符号右移: 左侧补符号位
	 */
	public static void rightShift(int num, int shift){
		// num 左移 shift位
		int r = num >> shift;
		System.out.println("(带符号)向右移位: "+ num +" >> "+shift);
		System.out.println("移位前:"+binary(num));
		System.out.println("移位后:"+binary(r));
		System.out.println("");
	}
	/**
	 * 测试右移: 左侧补0
	 */
	public static void testUnsignedRightShift(){
		int num = -8;
		int shift = 2;
		unsignedRightShift(num, shift);
		unsignedRightShift(-num, shift);
		System.out.println("--------------");
	}
	/**
	 * 右移: 左侧补0
	 */
	public static void unsignedRightShift(int num, int shift){
		// num 左移 shift位
		int r = num >>> shift;
		System.out.println("无符号向右移位: "+ num +" >>> "+shift);
		System.out.println("移位前:"+binary(num));
		System.out.println("移位后:"+binary(r));
		System.out.println("");
	}

	public static String binary(int  i){
		return alignRight(Integer.toBinaryString(i),32,'0');
	}
	/**
	 * 向右对齐
	 * @param str 原始字符串
	 * @param digit 需要的总位数
	 * @param addChar 添加的字符
	 * @return
	 */
	public static String alignRight(String str, int digit, char addChar){
		str = String.valueOf(str);
		digit = digit > 0 ? digit : 0;

		StringBuilder builder = new StringBuilder(digit);
		builder.append(str);

		for (int len = str.length(); len < digit; len++) {
			builder.insert(0, addChar);
		}
		//
		return builder.toString();
	}
}

关于Java的移位运算符的更多相关文章

  1. Java的移位运算符

    1.左移运算符:<< 丢弃左边指定位数,右边补0. 注意: 当int类型进行左移操作时,左移位数大于等于32位操作时,会先求余(%)后再进行左移操作.也就是说左移32位相当于不进行移位操作 ...

  2. Java 基础--移位运算符

    移位运算符就是在二进制的基础上对数字进行平移.按照平移的方向和填充数字的规则分为三种: <<(左移).>>(带符号右移)和>>>(无符号右移). 1.左移 按 ...

  3. Java:Java的<<<移位运算符详解

    1) 左移运算(<<)       左移就是把所有位向左移动几位 如:   12 << 2    意思就是12向左移动两位 12的二进制是: 0000 1100 通过这个图我们 ...

  4. java中移位运算符:<<、>>和>>>之间的比较

    一.说明 <<:运算符将二进制位进行左移操作 >>:运算符将二进制位进行右移操作 >>>:运算符将用0填空高位 二.举例 /** * *----------c ...

  5. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  6. java 移位运算符

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  7. Java中的移位运算符

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  8. 移位运算符(JAVA)

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>     :     右移运算符,num >&g ...

  9. java移位运算符具体解释

    java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的全部位都左移 ...

随机推荐

  1. jvm(四):垃圾回收

    垃圾回收我们主要从以下三个方面进行描述 垃圾对象的判断 目前判断对象为垃圾对象有两种方法:引用计数法,可达性分析法,目前普遍是的是可达性分析法 可达性分析法的实现原理: 定义gcroot一直往下找,如 ...

  2. Python中的str与unicode处理方法

    Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客    python2.x中处理 ...

  3. HTML标签部分(块级/行级)

    一.基本块级标签 1.HTML标签的分类:      a.块级标签:显示为块状,独占一行,自动换行.      b.行级标签:在一行中,从左往右依次排列,不会自动换行. 2.h标签(标题标签) h标签 ...

  4. c++类的声明

    就像函数的声明与定义分离一样,我们也可以仅声明类而暂时不定义类: class ClassName;//ClassName类的声明 这种声明有时被称作前向声明 对于一个类来说,我们创建它的对象之前该类必 ...

  5. .NET中的各种池

    在.NET中,常用到的池有四个:字符串拘留池.线程池 .应用程序池.数据库连接池. 字符串拘留池 在.NET中字符串是不可变对象,修改字符串变量的值会产生新的对象.为降低性能消耗及减小程序集大小,.N ...

  6. Oracle中表字段相关操作举例

    --创建测试表 create or replace table student ( xh ), --学号 xm ), --姓名 sex ), --性别 birthday date, --日期 sal ...

  7. 匿名函数lambda

    匿名函数的定义 在python中,匿名函数的定义如下: func =lambda x:x+1 #定义匿名函数,x为传参,x+1为返回值,func为函数名 res = func(10) #执行匿名函数 ...

  8. acm几何

    fzu 2231,N个点求构成的平行四边行个数. 题意简重点在优化上 #include <cstdio> #include <iostream> #include <cs ...

  9. 安卓高级 WebView的使用到 js交互

    我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app ...

  10. linux:如何指定进程运行的CPU

    coolshell最新的文章<性能调优攻略>在"多核CPU调优"章节,提到"我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为 ...