A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-2-1 15:32 编辑

计算机中的"位运算": //计算机中的"位运算"指的就是针对"二进制"运算,也就是说"位运算"操作的都是二进制数据.
        &运算:
                7 & 0:
                //计算
                        0000 0111   //7
                        &
                        0000 0000        //0
                        --  
                        0000 0000 --> 0
                        
                7 & 8:
                //计算
                        0000 0111   //7
                        &
                        0000 1000        //8
                        --
                        0000 0000 --> 0
        
        |运算:
                7 | 0:
                //计算
                        0000 0111   //7
                        |
                        0000 0000        //0
                        --  
                        0000 0111 --> 7
                        
                7 | 8:
                //计算
                        0000 0111   //7
                        |
                        0000 1000        //8
                        --
                        0000 1111 --> 15
                        
        >>运算:右移运算
                12 >> 1 == 6
                12 >> 2 == 3
                12 >> 3 == 1
                // 所谓的右移,指的就是除以2的几次方. 比如: 12 >> 2,就是12除以2的2次方,就是12除以4,取整,结果是3
                // 右移,超出部分砍掉,前边不够,就补齐,
                // 补得时候,如果前边是0,就补0,如果前边是1,就补1
               
                分析:
                        12 >> 2 == 3
                        //计算        
                                0000 1100 //12
                                >> 2
                                  00 001100 --> 砍掉最后两个,前边补齐, --> 0000 0011 --> 3
                                 
        <<运算:左移运算
                3 << 1 == 6
                3 << 2 == 12
                3 << 3 == 24
                // 所谓的左移,指的就是乘以2的几次方. 比如: 3 << 2,就是3乘以2的2次方,就是3乘以4,12
                // 左移,超出部分砍掉,后边不够直接补0
                分析:
                        12 << 2 == 3
                        //计算        
                                0000 1100 //12
                                << 2
                          000011 00   --> 砍掉前边两个,后边补齐, --> 0011 0000 --> 48
                          
        >>>运算:无符号右移运算
                12 >>> 1 == 6
                12 >>> 2 == 3
                12 >>> 3 == 1
                // 所谓的右移,指的就是除以2的几次方. 比如: 12 >> 2,就是12除以2的2次方,就是12除以4,取整,结果是3
                // 右移,超出部分砍掉,前边不够,就补齐,补0
               
                分析:
                        -2 >> 2 ==        -1
                                //计算
                                        1000 0000 0000 0000 0000 0000 0000 0010 //int类型的-2源码
                                        1111 1111 1111 1111 1111 1111 1111 1101 //int类型的-2反码
                                        1111 1111 1111 1111 1111 1111 1111 1110 //int类型的-2补码
                                        >> 2
                                        1111 1111 1111 1111 1111 1111 1111 1111  //补码
                                        1111 1111 1111 1111 1111 1111 1111 1110  //反码=补码-1
                                        1000 0000 0000 0000 0000 0000 0000 0001  //源码 --> -1
                                       
                        -2 >>> 2 ==  1073741823
                                //计算
                                        1000 0000 0000 0000 0000 0000 0000 0010 //int类型的-2源码
                                        1111 1111 1111 1111 1111 1111 1111 1101 //int类型的-2反码
                                        1111 1111 1111 1111 1111 1111 1111 1110 //int类型的-2补码
                                        >>> 2
                                        0011 1111 1111 1111 1111 1111 1111 1111  //补码,反码,源码 --> 1073741823
                                       
                                       
                                        //11ad2ed495714cc2b6588ae9973cd6d8_day17.java
                                        1101 0000 1001 0111 1010 1100 1001 0101 -->  //-1352117397
                                        1010 1111 0110 1000 0101 0011 0110 1010 -->  //-1352117397 反码
                                        1010 1111 0110 1000 0101 0011 0110 1011 -->  //-1352117397 补码
                                        &
                                        0000 0000 0000 0000 0000 0000 0000 1111 // 0xf
                                        --
                                        0000 0000 0000 0000 0000 0000 0000 1011  -- 11
                                       
                                       
                                        -->
                                        1010 1111 0110 1000 0101 0011 0110 1011 -->  //-1352117397 补码
                                        >>> 4
                                        0000 1010 1111 0110 1000 0101 0011 0110
                                        &
                                        0000 0000 0000 0000 0000 0000 0000 1111 // 0xf
                                        --
                                        0000 0000 0000 0000 0000 0000 0000 0110 //6
        

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马