关于Java的移位运算符

简介: /** * 测试移位运算符 * ">" 带符号右移 : 左侧补符号位:正数补0,负数补1 * ">>>"无符号右移 : 左侧补0 */public class TestShift { public static void main(String[] args) { testL...
/**
 * 测试移位运算符<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();
	}
}

目录
相关文章
|
28天前
|
Java 测试技术 数据处理
Java零基础教学(17):Java运算符详解
【8月更文挑战第17天】Java零基础教学篇,手把手实践教学!
39 4
|
3月前
|
Java C++
Java基础之运算符
Java运算符包括算术、赋值、关系、逻辑、条件和类型等,如加减乘除、自增自减(前缀++n/后缀n++)、赋值(+/-/*/=等)、比较(==/!=/&gt;/&lt;等)、逻辑(&&/||/!)和三元运算符。自增前后缀的区别在于赋值顺序。初面常问:=与==的区别(赋值vs比较),==与equals()(引用vs内容比较),&&与&(短路逻辑与vs按位与)。
22 2
|
18天前
|
Java 测试技术 程序员
Java零基础(23) - Java赋值运算符,了解一下!
【9月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
38 11
|
1月前
|
Java 测试技术 计算机视觉
Java零基础(18) - Java运算符,了解一下!
【8月更文挑战第18天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
26 5
|
30天前
|
Java
【Java 第三篇章】注释、数据类型、运算符
【8月更文挑战第2天】 Java支持三种注释:单行(`//`)、多行(`/*...*/`)及文档注释(`/**...*/`)。它定义了八种基本数据类型,包括四种整数类型(`byte`、`short`、`int`、`long`),两种浮点类型(`float`、`double`),一种字符类型(`char`)和一种布尔类型(`boolean`)。数据类型之间可以自动转换或通过强制转换改变,但后者可能导致精度损失。Java中的运算符涵盖算术(如`+`、`-`)、赋值(如`=`)、比较(如`==`)、逻辑(如`&&`)和三目运算符等。例如,算术运算可用于执行基本数学计算,而逻辑运算符用于组合条件判断。
12 1
|
17天前
|
Java 测试技术 开发者
Java零基础(24) - Java条件运算符,了解一下!
【9月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
8 0
|
1月前
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(下)
02 Java基础语法(变量+数据类型+运算符)
20 5
|
1月前
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(上)
02 Java基础语法(变量+数据类型+运算符)
41 4
|
2月前
|
安全 Java 测试技术
day16:Java零基础-instanceof 运算符
【7月更文挑战第16天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
38 8
|
2月前
|
Java 测试技术
day14:Java零基础-条件运算符
【7月更文挑战第14天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
31 3