Java移位运算之算术右移位

算术左移运算符

>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.
  语法格式:
  需要移位的数字 >> 移位的次数

package com.zzwx.test.shifting;

public class MainRight {

	public static void main(String[] args) {

		for (int p = 50; p < 55; p++) {
			System.out.println("////////////算术右移位 - " + p + "/////////////");
			for (int n = 1; n <= 4; n++) {
				System.out.println("需要移位的数字 : " + p + " \t 转换二进制 : "
						+ toBinaryString(p) + " \t 移位量 : " + n
						+ " \t 移位后的二进制 : "
						+ shiftToBinaryRight(toBinaryString(p), n)
						+ " \t value : " + (p >> n));
			}
			System.out.println("////////////算术右移位 - " + p + "/////////////");
		}
		System.out
				.println("算术右移位 ------>    p >> n = [p / 2的n次方 >= 1 --> 取整]  || [p / 2的n次方 < 1 --> 0]");
	}

	/**
	 * 获取当前数字的二进制
	 * 
	 * @param num
	 *            int数字
	 * @return 二进制字符
	 */
	public static String toBinaryString(int num) {
		return Integer.toBinaryString(num);
	}

	/**
	 * 通过移位量获取移位后的二进制
	 * 
	 * @param binaryStr
	 *            需要移位的二进制
	 * @param shift
	 *            偏移量
	 * @return 移位后的二进制
	 */
	public static String shiftToBinaryRight(String binaryStr, int shift) {

		binaryStr = binaryStr.substring(0, binaryStr.length() - shift) +"."+
				binaryStr.substring(binaryStr.length() - shift, binaryStr.length());

		return binaryStr;
	}

}

测试结果

////////////算术右移位 - 50/////////////
需要移位的数字 : 50 	 转换二进制 : 110010 	 移位量 : 1 	 移位后的二进制 : 11001.0 	 value : 25
需要移位的数字 : 50 	 转换二进制 : 110010 	 移位量 : 2 	 移位后的二进制 : 1100.10 	 value : 12
需要移位的数字 : 50 	 转换二进制 : 110010 	 移位量 : 3 	 移位后的二进制 : 110.010 	 value : 6
需要移位的数字 : 50 	 转换二进制 : 110010 	 移位量 : 4 	 移位后的二进制 : 11.0010 	 value : 3
////////////算术右移位 - 50/////////////
////////////算术右移位 - 51/////////////
需要移位的数字 : 51 	 转换二进制 : 110011 	 移位量 : 1 	 移位后的二进制 : 11001.1 	 value : 25
需要移位的数字 : 51 	 转换二进制 : 110011 	 移位量 : 2 	 移位后的二进制 : 1100.11 	 value : 12
需要移位的数字 : 51 	 转换二进制 : 110011 	 移位量 : 3 	 移位后的二进制 : 110.011 	 value : 6
需要移位的数字 : 51 	 转换二进制 : 110011 	 移位量 : 4 	 移位后的二进制 : 11.0011 	 value : 3
////////////算术右移位 - 51/////////////
////////////算术右移位 - 52/////////////
需要移位的数字 : 52 	 转换二进制 : 110100 	 移位量 : 1 	 移位后的二进制 : 11010.0 	 value : 26
需要移位的数字 : 52 	 转换二进制 : 110100 	 移位量 : 2 	 移位后的二进制 : 1101.00 	 value : 13
需要移位的数字 : 52 	 转换二进制 : 110100 	 移位量 : 3 	 移位后的二进制 : 110.100 	 value : 6
需要移位的数字 : 52 	 转换二进制 : 110100 	 移位量 : 4 	 移位后的二进制 : 11.0100 	 value : 3
////////////算术右移位 - 52/////////////
////////////算术右移位 - 53/////////////
需要移位的数字 : 53 	 转换二进制 : 110101 	 移位量 : 1 	 移位后的二进制 : 11010.1 	 value : 26
需要移位的数字 : 53 	 转换二进制 : 110101 	 移位量 : 2 	 移位后的二进制 : 1101.01 	 value : 13
需要移位的数字 : 53 	 转换二进制 : 110101 	 移位量 : 3 	 移位后的二进制 : 110.101 	 value : 6
需要移位的数字 : 53 	 转换二进制 : 110101 	 移位量 : 4 	 移位后的二进制 : 11.0101 	 value : 3
////////////算术右移位 - 53/////////////
////////////算术右移位 - 54/////////////
需要移位的数字 : 54 	 转换二进制 : 110110 	 移位量 : 1 	 移位后的二进制 : 11011.0 	 value : 27
需要移位的数字 : 54 	 转换二进制 : 110110 	 移位量 : 2 	 移位后的二进制 : 1101.10 	 value : 13
需要移位的数字 : 54 	 转换二进制 : 110110 	 移位量 : 3 	 移位后的二进制 : 110.110 	 value : 6
需要移位的数字 : 54 	 转换二进制 : 110110 	 移位量 : 4 	 移位后的二进制 : 11.0110 	 value : 3
////////////算术右移位 - 54/////////////
算术右移位 ------>    p >> n = [p / 2的n次方 >= 1 --> 取整]  || [p / 2的n次方 < 1 --> 0]
时间: 2024-10-15 17:25:20

Java移位运算之算术右移位的相关文章

Java移位运算之算术左移位

算术左移运算符 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 语法格式: 需要移位的数字 << 移位的次数 例如: 3 << 2,则是将数字3左移2位 package com.zzwx.test.shifting; public class Main { public static void main(String[] args) { for (int p = 1; p < 4; p++) { System.out.println("

移位运算溢出:右操作数须小于左操作数的位数

#include <stdio.h> int main(){ int x = 1 << 32; int y = 32; int z = 1 << y; printf("x:%d, z: %d\n", x, z);} 以上运行结果: x:0, z: 1 汇编代码如下: 1 .file "tmp.c" 2 .section .rodata 3 .LC0: 4 .string "x:%d, z: %d\n" 5 .t

Java中&#39;&amp;&#39;与、&#39;|&#39;或、&#39;^&#39;异或、&#39;&lt;&lt;&#39;左移位、&#39;&gt;&gt;&#39;右移位

1 public static void main(String[] args) { 2 /* 3 * &:与运算 4 * 全为1则为1,否则为0 5 */ 6 System.out.print(1 & 0); 7 System.out.print("--"); 8 System.out.print(1 & 1); 9 System.out.print("--"); 10 System.out.println(0 & 0); 11 /

移位运算、Arrays中的copyOf、java.util.AbstractCollection、linux命令之tail

移位运算:http://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html. ---------- Arrays中的copyOf: ----------------------- jdk1.8源码之java.util.AbstractCollection : http://www.cnblogs.com/0xcafebabe/p/6659515.html, http://www.cnblogs.com/leipeng-whale

【原创】Java移位运算

学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧. Java基础类型 Java基础类型总结一览表 类型 二进制位数 最大值 最小值 初始化值 表示形式 带符号 char 8 127(2^7-1) -128(-2^7) 0 二进制补码 是 short 16 32767(2^15 - 1) -32768(-2^15) 0 二进制补码 是 int 32 2,147,485,647(2^31 - 1) -2,147,483,648(-2^31) 0 二进制补码 l

java 移位运算

版权声明:转载请注明出处:http://www.cnblogs.com/lkcc/ 请读者亲自试一试代码,以免文章有误而误解. 移位运算 :将整数转化为二进制(以补码的形式),按位平移. <<     左移 >>     右移 >>>   无符号右移 << 右移: 按位做平移,末位用0补上(正负数都一样) a << n; 如果 a 是  byte.short.int 类型 那么 a << n 就是  a << (n%

Java 位运算(移位、位与、或、异或、非)与逻辑运算

java 位运算包括:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符. 逻辑运算符&.&&.|.||: 一.逻辑&与短路&&的区别 总的来说区别是体现在,只有这两个运算符的左边为false的时候会有区别,看如下代码 1.逻辑&的运算 boolean a = tr

关于对移位运算的理解

之前在<计算机组成原理>这门课中学习了很多,其中包括二进制数的移位运算.当时并不理解他们用来作甚,迷迷糊糊的状态,学了都不知道为什么要学.什么东西总是到了需要用到的时候,才明白,哦,原来乳齿啊!以下是我在java编程中对移位运算的理解和总结: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1.补码的表示需要满足如下要求. (1)正数的最高位为0,其余各位代表数值本身(二进制数). (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1. 一.算术移位:

一篇文章搞懂移位运算

前提知识: 1. 计算机中对于有符号数的表示有三种方式,原码,补码,反码. 2. 在Java中,二进制数最高位是符号位,0表示正数,1表示负数: 3. 正数的表示,例如byte/int 数3,  二进制就是 0000 0011,负数的表示稍微麻烦一点(负数在计算机中是以补码的形式存储的) -5 的二进制: 1. -5的绝对值二进制表示  0000 0101 2. 然后求这个数的反码  1111 1010 3. 将反码加1 变成  1111 1011 , 这个就是-5的二进制表示(补码) 移位运算