>>" 无符号右移 ">>" 有符号右移 区别:无符号右移会给最高位补上0,而有符号右移则看原来最...">

与运算

作者: syimo | 来源:发表于2016-11-13 14:00 被阅读0次

    与运算

    • " >>>" 无符号右移 ">>" 有符号右移
    • 区别:无符号右移会给最高位补上0,而有符号右移则看原来最高位是啥,就补上啥。
    • 右移一位相当于除以21,右移两位相当于除以22
    • 一个数字 & 1,则取这个数的二进制最后一位。& 15 ,则取这个数字二进制的最后4位

    问题:

    • 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。
    高效运算.PNG
    
    /**
     * 取一个数字二进制的最后一位,则&1;如果要取4位,则&15;即(2的N次-1)
     * 例如把9表示成二进制是1001 ,有2位是1. 因此如果输入9,该出2。
     * >>>代表无符号右移,最高位补为0。>>有符号的右移,最高位补上原来的最高位
     * 
     * @author xhq
     *
     */
    public class N10 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println(function1(9));
            System.out.println(function2(9));
        }
    
        public static int function1(int n) {
            // int型,在java中占32个字节,运行32次。这样包括负数。
            // 每次运算,将末尾的一个数字移除
            int result = 0;
            for (int i = 0; i < 32; i++) {
                if ((n & 1) == 1)
                    result++;
                n = n >>> 1;
            }
            return result;
        }
    
        public static int function2(int n) {
            
            //把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。
            //那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作
            int result = 0;
            while (n > 0) {
                result++;
                n = n & (n - 1);
            }
            return result;
        }
    
    }
    
    

    参考

    二进制中1的个数

    相关文章

      网友评论

          本文标题:与运算

          本文链接:https://www.haomeiwen.com/subject/rfdcpttx.html