位运算

概念
        数字用二进制表示,每位要么是0要么是1,并在此基础上进行运算。
        Bitwise is a level of operations that involves working with individual bits, which are the smallest units of data in a computer.
        我们平时用的数字是十进制,每位是0到9中的一个。

应用
        此处只是抛砖引玉,应用场景应该很多!
        1. 用来判断整数是否是偶数
        2. 用来判断正式是否是2的n次幂

内容
        常用的位运算有 &、|、^、<<、>>、>>>、~
        & 中文叫与运算,英文叫 bitwise and
        0 & 0 = 0;
        1 & 0 = 0;
        0 & 1 = 0;
        1 & 1 = 1;

        | 中文叫或运算,英文叫bitwise or
        0 I 0 = 0;
        0 | 1 = 1;
        1 | 0 = 1;
        1 | 1 = 1;

        <<中文叫左移,英文叫left shift
        6<<2等于多少呢
        6用二级制表示是00000000000000000000000000000110    
        左移2位,然后右边空出了两位,正整数补0或负整数补1。就变成00000000000000000000000000011000
        00000000000000000000000000011000 再用十进制表示就是24.
        即 6<<2=24,相当于 6 * (2*2)=24

        >>叫右移,英文叫right shift
        6>>2等于多少呢
        6用二级制表示是00000000000000000000000000000110
        右移两位,然后左边空了两位,正整数补0或负整数补1。就变成了00000000000000000000000000000001
        00000000000000000000000000000001再用十进制表示就是1.
        即6>>2=1,相当于6/(2*2)=1

        ^叫异或,也许叫异更准确点,英文叫exclusive or
        0 ^ 0 = 0;
        1 ^ 0 = 1;
        0 ^ 1 = 1;
        1 ^ 1 = 0;

        ~叫,也叫位非,英文叫bitwise not
        它是一元运算,即只要一个元素参与
        ~ 0 = 1;
        ~ 1 = 0;
    
     

        >>>叫无符号右移,英文叫logical right shift
        6 >>> 2也是等于1
        -6 >>> 2等于多少呢
        -6用二进制表示11111111111111111111111111111010
        右移两位,然后左边空出两位补零,就变成00111111111111111111111111111110
        00111111111111111111111111111110在用十进制表示就是1073741822。
        注:这里以32位整数来计算的,如果是64位,其运算结果是不一样


优点
        在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)
        网友有篇关于它位运算速度文章:https://blog.csdn.net/qq_36523667/article/details/79321594 

缺点    
        和我们从小用的十进制不一样,使得它比较难以理解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。