java |、&、~、>>、<<運算符的作用。


package aa;

public class BitUtils {
          
        /** 
         * 獲取運算數指定位置的值<br> 
         * 例如: 0000 1011 獲取其第 0 位的值為 1, 第 2 位 的值為 0<br> 
         *  
         * @param source 
         *            需要運算的數 
         * @param pos 
         *            指定位置 (0<=pos<=7) 
         * @return 指定位置的值(0 or 1) 
         */  
        public static byte getBitValue(byte source, int pos) {  
            return (byte) ((source >> pos) & 1);  
        }  
          
      
        /** 
         * 將運算數指定位置的值置為指定值<br> 
         * 例: 0000 1011 需要更新為 0000 1111, 即第 2 位的值需要置為 1<br> 
         *  
         * @param source 
         *            需要運算的數 
         * @param pos 
         *            指定位置 (0<=pos<=7) 
         * @param value 
         *            只能取值為 0, 或 1, 所有大於0的值作為1處理, 所有小於0的值作為0處理 
         *  
         * @return 運算后的結果數 
         */  
        public static byte setBitValue(byte source, int pos, byte value) {  
      
            byte mask = (byte) (1 << pos);  
            if (value > 0) {  
                source |= mask;  
            } else {  
                source &= (~mask);  
            }  
      
            return source;  
        }  
          
      
        /** 
         * 將運算數指定位置取反值<br> 
         * 例: 0000 1011 指定第 3 位取反, 結果為 0000 0011; 指定第2位取反, 結果為 0000 1111<br> 
         *  
         * @param source 
         *  
         * @param pos 
         *            指定位置 (0<=pos<=7) 
         *  
         * @return 運算后的結果數 
         */  
        public static byte reverseBitValue(byte source, int pos) {  
            byte mask = (byte) (1 << pos);  
            return (byte) (source ^ mask);  
        }  
          
      
        /** 
         * 檢查運算數的指定位置是否為1<br> 
         *  
         * @param source 00001011
         *            需要運算的數 
         * @param pos 
         *            指定位置 (0<=pos<=7) 
         * @return true 表示指定位置值為1, false 表示指定位置值為 0 
         */  
        public static boolean checkBitValue(byte source, int pos) {  
      
            source = (byte) (source >>> pos);  
      
            return (source & 1) == 1;  
        }  
      
        /** 
         * 入口函數做測試<br> 
         *  
         * @param args 
         */  
        public static void main(String[] args) {  
      
            // 取十進制 11 (二級制 0000 1011) 為例子  
            byte source = 11;  
      
            // 取第2位值並輸出, 結果應為 0000 1011  
            for (byte i = 7; i >= 0; i--) {  
                System.out.printf("%d ", getBitValue(source, i));  
            }  
      
            // 將第6位置為1並輸出 , 結果為 75 (0100 1011)  
            System.out.println("\n" + setBitValue(source, 6, (byte) 1));  
      
            // 將第6位取反並輸出, 結果應為75(0100 1011)  
            System.out.println(reverseBitValue(source, 6));  
      
            // 檢查第6位是否為1,結果應為false  
            System.out.println(checkBitValue(source, 6));  
      
            // 輸出為1的位, 結果應為 0 1 3  
            for (byte i = 0; i < 8; i++) {  
                if (checkBitValue(source, i)) {  
                    System.out.printf("%d ", i);  
                }  
            }  
      
    }  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM