zoukankan      html  css  js  c++  java
  • 位运算符

    /**
     * 测试移位运算符<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();
    	}
    }

    向左移位: -8 << 2
    移位前:11111111111111111111111111111000
    移位后:11111111111111111111111111100000

    向左移位: 8 << 2
    移位前:00000000000000000000000000001000
    移位后:00000000000000000000000000100000

    --------------
    (带符号)向右移位: -8 >> 2
    移位前:11111111111111111111111111111000
    移位后:11111111111111111111111111111110

    (带符号)向右移位: 8 >> 2
    移位前:00000000000000000000000000001000
    移位后:00000000000000000000000000000010

    --------------
    无符号向右移位: -8 >>> 2
    移位前:11111111111111111111111111111000
    移位后:00111111111111111111111111111110

    无符号向右移位: 8 >>> 2
    移位前:00000000000000000000000000001000
    移位后:00000000000000000000000000000010

    --------------

  • 相关阅读:
    05---二叉树---20195106023---王亚威.c
    05---二叉树---20195106043---方传祥.c
    05---二叉树---20195106006---陈辉.c
    05---二叉树---20195106064---陈昕.c
    05---二叉树---20195106100---李遂勋.c
    2020下---3D建模---作业---blender
    nothing provides python(abi) = 3.8 needed by VirtualBox-6.1-6.1.16_140961_fedora32-1.x86_64
    el-table、pl-table(u-table)、ux-grid解决表格问题的实例(大数据量)
    1800*1【Codeforces Round #665 (Div. 2) D】Maximum Distributed Tree
    【Educational Codeforces Round 97 (Rated for Div. 2) C】Chef Monocarp
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349540.html
Copyright © 2011-2022 走看看