JavaSE005_二进制转换、与或非异或、位运算

直接看代码

public class TestDemo {  
	public static void main(String[] args) {  
        
        /* 符号为:最高位同时表示图号,0为正数,1为负数 */  
          
        /*  
            1、二进制转换为十进制 
 
            二进制转换为10进制的规律为: 每位的值 * 2的(当前位-1次方) 
            例如: 
         00000001 = 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0  = 1 
         00000010 = 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0  = 2 
                 
            2、二进制的符号位: 
            最高位表示符号位,0表示正数  , 1表示负数                  
             
            3、将二进制负数转换为十进制
	先对该二进制数取反,然后加1,再转换为十进制,然后在前面加上负号 
           例如: 
       10101011 最高位为1,所以为负数 
                   第一步:取反: 01010100 
                   第二步:加1 : 01010101 
                   第三步:转换为10进制:85 
                   第四步:加上负号: -85 
                   所以      10101011 转换为十进制为 -85 
                    
            4、将十进制负数转换为二进制
	先得到该十进制负数的绝对值,然后转换为二进制,然后将该二进制取反,然后加1 
	例如:
	  -85 
                第一步:得到绝对值 85 
                第二步:转换为二进制:01010101 
                第二步:取反:                10101010 
                第三步:加1:                 10101011 
                所以,-85转换为二进制为  10101011 
         */  
          
        /* 
        ~ ‘非’ 运算符是将目标数的进制去反,即0变成1 ,1变成0 
        2的二进制码为 00000010 , 它取反为11111101 ,可见取反后结果为负数(二进制负数转换为十进制的步骤为:将二进制取反,然后+1) 
	         将 11111101 转换为10进制 ,第一步取反 得到 00000010 然后 加1 得到 00000011 ,得到的结果为3 ,然后在前面加上负号就可以了 
	         所以结果为-3 
         */  
        System.out.println(~2);  //-3
          
        /* 
          ^ 异或 ,计算方式为:两个二进制数的位相同则为0 不同则为1 
          23转换为二进制为:00010111 
          12转换为二进制为:00001100 
                           计算结果为:00011011  =  27 
         */  
        System.out.println(23 ^ 12);   //27
          
        /*
         *  & 按位与 ,计算方式为:两个二进制数的位都为1则为1 ,否则为0 
         */
         /*	例如1&2
         1的二进制为 :00000001 
         2的二进制为 :00000010 
                       结果为 :00000000 = 0 */            
        System.out.println(1&2);  //0
        
        /*	例如128&129
        128的二进制为 :10000000 
        129的二进制为 :10000001 
                      结果为 :10000000 = 128 */
        System.out.println("128 和129 与的结果是:"+(128&129)); //128
          
        /* 
         * | 按位或 ,计算方式为:两个二进制位有一个为1就为1,否者为0 
         */
          /* 例如5|6
          5 的二进制为:00000101 
          6 的二进制为:00000110 
                          结果为:00000111 = 7*/            
        System.out.println(5|6);    //7 
        
        /* 例如128|129
        128的二进制为 :10000000 
        129的二进制为 :10000001 
                      结果为 :10000001 = 129 */ 
        System.out.println("128 和129 或的结果是:"+(128|129)); //129
          
        /* 
          >> 右移运算符(num >> 1,相当于num除以2),符号左边表示要被移位的数,右边表示需要移的位数,结果为正数则在左边补0,否则补1 
          3 的二进制为:00000010 
                          向右移动1位:00000001 = 1  
         */  
        System.out.println(3 >> 1);  //1
        
        /* 
         << 左移运算符(num << 1,相当于num乘以2),符号左边表示要被移位的数,右边表示需要移的位数,结果为正数则在右边补0,否则补1 
         3 的二进制为:00000010 
                        向左移动1位:00000100 = 6  
       */  
        System.out.println(3 << 1);  //6
      
      /* 
        >>> 无符号右移,符号左边表示要被移位的数,右边表示需要移的位数,忽略符号位,空位都以0补齐
        3 的二进制为:00000010 
                    向右移动1位:00000001 = 1  
     */  
    	System.out.println(3 >>> 1);  //1
    }  
} 


你可能感兴趣的:(JavaSE005_二进制转换、与或非异或、位运算)