• 算法基础


    进制

    16进制(0x)是1位数表示4位,如0x11二进制表示为00010001

    8进制(0)是1位数表示3位,如023二进制表示为010011

    2进制(无)

    位运算符

    & 与运算符:2个操作数 都为1,结果才为1,否则为0

    | 或操作符:。。。。。 只要有1个位1,结果就为1,否则为0

    ~ 非操作符:。。。。。 ~0=1;~1=0

    ^ 异或操作符:。。。。 位相同为0,位不同为1

    移位运算符

    左移运算符(<<):将运算符左边的对象,向左移动运算符右边指定的位数,并且低位补0

            向左移动n位,相当于(十进制)乘上2的n次方

    右移运算符(>>>):将运算符左边的对象,向右移动运算符右边指定的位数,并且高位补0

            向右移动n位,相当于(十进制)除上2的n次方

    带符号右移运算符(>>):将运算符左边的对象,向右移动运算符右边指定的位数

            如果是正数,在高位补0;如果是负数,在高位补1

    负数的二进制如何得出

    相信正数的二进制表示大家都懂,但是这个-4怎么来的?二进制编码中首位0代表负,1代表正。而4的二进制编码是00000000 00000000 00000000 00000100,那么轻而易举得出-4就是10000000 00000000 00000000 00000100,但是显然用计算机得出的结果并不是如此。下面讲如何转换。
    其实-4的二进制编码=4的补码,而 补码 = 源码取反+1
    先对 00000000 00000000 00000100取反后是11111111 11111111 11111111 11111011,取反后加1得11111111 11111111 11111111 11111100,正是最后结果。
    记住负数二进制其实是正数补码,即取反后加1所得。

    常用举例

    不用临时变量交换两个数:

    a ^= b;

    b ^= a;

    a ^= b;  

    //判断1个数的奇偶性
    boolean isOddNumber(int n){  
        return (n & 1) == 1;  
    }

    获取int最大值:

    (1 << 31) - 1;

    获取int最小值:

    (1 << 31)

    获取long最大值:

    ((long)1 << 127) - 1;  

    ((long)1 << 255) - 1;//这也可以

    最小值类似int

  • 相关阅读:
    bzoj2957 -- 线段树
    bzoj2209 [ JSOI2011 ] -- splay
    bzoj3874 [ AHOI2014 ] -- 爬山算法
    bzoj1038 [ ZJOI2008 ] -- 模拟退火+二分
    bzoj2428 [ HAOI2006 ] -- 模拟退火
    bzoj3680 -- 模拟退火
    bzoj4500 -- 差分约束
    bzoj3527 -- FFT
    bzoj1013 [ JSOI2008 ] -- 高斯消元
    使用nginx try_files 指令 管理静态资源
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/5893100.html
Copyright © 2020-2023  润新知