zoukankan      html  css  js  c++  java
  • 位操作

    1. 如果n为2的幂,则

    a%n = a & (n-1)

    2. mod运算规则:

    结合律
    ((a+b) mod p + c)mod p = (a + (b+c) mod p) mod p
    ((a*b) mod p * c)mod p = (a * (b*c) mod p) mod p
    交换律
    (a + b) mod p = (b+a) mod p
    (a × b) mod p = (b × a) mod p
    分配律
    ((a +b)mod p × c) mod p = ((a × c) mod p + (b × c) mod p) mod p
    (a×b) mod c=(a mod c * b mod c) mod c
    (a+b) mod c=(a mod c+ b mod c) mod c
    (a-b) mod c=(a mod c- b mod c) mod c

    3. 判断一个数n是否是2的幂:

    n > 0 && ((n & (n - 1)) == 0 )

    4. 最高位1对应的整数:

        /**
         * Returns an {@code int} value with at most a single one-bit, in the
         * position of the highest-order ("leftmost") one-bit in the specified
         * {@code int} value.  Returns zero if the specified value has no
         * one-bits in its two's complement binary representation, that is, if it
         * is equal to zero.
         *
         * @return an {@code int} value with a single one-bit, in the position
         *     of the highest-order one-bit in the specified value, or zero if
         *     the specified value is itself equal to zero.
         * @since 1.5
         */
        public static int highestOneBit(int i) {
            // HD, Figure 3-1
            i |= (i >>  1);
            i |= (i >>  2);
            i |= (i >>  4);
            i |= (i >>  8);
            i |= (i >> 16);
            return i - (i >>> 1);
        }

    5. 最低位1对应的整数:

        /**
         * Returns an {@code int} value with at most a single one-bit, in the
         * position of the lowest-order ("rightmost") one-bit in the specified
         * {@code int} value.  Returns zero if the specified value has no
         * one-bits in its two's complement binary representation, that is, if it
         * is equal to zero.
         *
         * @return an {@code int} value with a single one-bit, in the position
         *     of the lowest-order one-bit in the specified value, or zero if
         *     the specified value is itself equal to zero.
         * @since 1.5
         */
        public static int lowestOneBit(int i) {
            // HD, Section 2-1
            return i & -i;
        }

    其实是i&(i-1的补数),因为i的补数加1等于-i,所以i的补数=-(i+1),i-1的补数=-i。

    i+i的补数=0xFFFFFFFF,i+(-i-1)=0xFFFFFFFF

    6. 前面0的个数:

        public static int numberOfLeadingZeros(int i) {
            // HD, Figure 5-6
            if (i == 0)
                return 32;
            int n = 1;
            if (i >>> 16 == 0) { n += 16; i <<= 16; }
            if (i >>> 24 == 0) { n +=  8; i <<=  8; }
            if (i >>> 28 == 0) { n +=  4; i <<=  4; }
            if (i >>> 30 == 0) { n +=  2; i <<=  2; }
            n -= i >>> 31;
            return n;
        }

    显然采用了二分的算法,不过从计算机的角度,移两次位应该是移一次位的两倍时间(猜测),这样的二分真的合适吗

    7. 后面0的个数:

        public static int numberOfTrailingZeros(int i) {
            // HD, Figure 5-14
            int y;
            if (i == 0) return 32;
            int n = 31;
            y = i <<16; if (y != 0) { n = n -16; i = y; }
            y = i << 8; if (y != 0) { n = n - 8; i = y; }
            y = i << 4; if (y != 0) { n = n - 4; i = y; }
            y = i << 2; if (y != 0) { n = n - 2; i = y; }
            return n - ((i << 1) >>> 31);
        }
  • 相关阅读:
    第一阶段冲刺第七天
    第一阶段冲刺第六天
    PHPCMS V9.6.0 SQL注入漏洞分析
    metinfo小于v6.2.0版本SQL盲注利用脚本
    metinfo小于v6.2.0版本通杀SQL盲注漏洞分析
    PHPSHE 1.7前台SQL注入漏洞分析
    sqli-labs Less-1~~~Less-23
    内网渗透靶场测试:(二)hash传递和黄金票据
    内网渗透靶场测试:(一)反向代理,互联互通
    intel:spectre&Meltdown侧信道攻击(五)—— DRAM address mapping
  • 原文地址:https://www.cnblogs.com/drizzlewithwind/p/6878901.html
Copyright © 2011-2022 走看看