zoukankan      html  css  js  c++  java
  • java移位的具体应用

    1.符号:<<:左移,>>右移,>>>无符号右移

        n<<1:n*2
        n>>1:n/2
    

    2.左移规则:向左移指定的位数,低位补零,高位舍弃多出的位数
    举例:

        1001<<1:00010010  1001<<2:00100100
        00001010<<1:00010100
    

    3.无符号右移规则:高位(左边)补零,低位(右边)舍弃指定的位数

        1001>>1:00000100
    

    4.有符号右移规则:正数:高位插零,负数:高位插一,低位(右边)舍弃指定的位数

        正数:00001001>>1:00000100
        负数:10001001>>1:11000100 
             10001001>>2:11100010
    

    5.应用场合
    <1>已知一个整数,求其二进制数中,1的个数。
    常规思路:对每一位都依次与1&一下为0,则为0,为1则为1.

    package day03; 
    /** 
     * @author wangpei 
     * @version 
     *创建时间:2017年2月7日 下午9:09:35 
     *输入十进制数,输出二进制数一的个数
     */
    public class Exercise01 {
        public static int getNumber(int x){
            int count=0;
            int flag=1;
            while(flag!=0){
                if((flag&x)!=0)
                    count++;
                flag=flag<<1;
            }
    
            return count;
    
        }
    
        public static void main(String[] args) {
        System.out.println(Exercise01.getNumber(8));
        }
    
    }
    

    解释:用1左移不用x右移的原因,右移,当x为负数时,会出现一直做右移运算,陷入死循环。例如10000001>>1:11000000,会改变高位的值,一直在补1,而对于,正数,可以用移x.
    (2)不用加减乘除,做加法

  • 相关阅读:
    MongoDB自学日记2——权限
    最近项目的几个问题
    MongoDB自学日记1——基本操作
    一次JVM调优的笔记
    Memcached学习笔记
    为博客添加计数器的方法
    关于多核系统同步互斥的小研究
    Linux中同步互斥机制研究之原子操作
    你真的懂printf么?
    Lingo安装
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551257.html
Copyright © 2011-2022 走看看