java bit 位移規律總結


/**
         例如:int i = 1; i占用 4 字節,1字節 = 8bit, 32位,bit(正整數 = 00000000 00000000 00000000 00000001 負數=11111111 11111111 11111111 11111111)

         數字(num)          bit
         1        ======      1
         2        ======      10
         3        ======      11
         4        ======      100
         5        ======      101
         6        ======      110
         7        ======      111
         8        ======      1000
         9        ======      1001
         10       ======      1010
         11       ======      1011
         12       ======      1100
         13       ======      1101
         14       ======      1110
         15       ======      1111
         16       ======      10000
         ...        ======      ...
         2147483632       ======      1111111111111111111111111110000
         2147483633       ======      1111111111111111111111111110001
         2147483634       ======      1111111111111111111111111110010
         2147483635       ======      1111111111111111111111111110011
         2147483636       ======      1111111111111111111111111110100
         2147483637       ======      1111111111111111111111111110101
         2147483638       ======      1111111111111111111111111110110
         2147483639       ======      1111111111111111111111111110111
         2147483640       ======      1111111111111111111111111111000
         2147483641       ======      1111111111111111111111111111001
         2147483642       ======      1111111111111111111111111111010
         2147483643       ======      1111111111111111111111111111011
         2147483644       ======      1111111111111111111111111111100
         2147483645       ======      1111111111111111111111111111101
         2147483646       ======      1111111111111111111111111111110
         2147483647       ======      1111111111111111111111111111111

         */

        /**
         *                                                  正整數位移規律
         *  1:int 正數 max(2147483647=(1 << 31) -1) bit = 1111111111111111111111111111111(31位),如果為32位,bit=10000000000000000000000000000000(32位,是負數),
         *             min(1) bit=00000000000000000000000000000001(31位),高位的0被省略了,所以才31位。
         *  2:  參考數字(1,2,3,4,5,6):bit 正數最高位為0(正數), 負數最高位為1(負數)
         *  3:  參考數字(1,2,3,4,5,6):bit 奇數 bit 低位=1, 偶數 bit 低位=0,加法算法規律,bit低位逢1高位補1,低位變0,逢0變1
         *  4:  參考數字(2,4,8,16):1 << n, bit = 1 + n個0, 1 >> bit = 1- n個0
         *  5:  參考數字(1,3,7,15):(1 << n)-1, num * 2 + 1的數字bit位都是1。
         *
         *  6:  或(|):  0 | 0 =0,
         *              1 | 0 = 1,
         *              1 | 1 = 1。如果相同位有一個位為1,則為1,否則為0。
         *             int num = (1 << n)-1, n < num, 那么num | n = num。 當(1 << n)-1與任何與它小的數字進行異或操作,結果為(1 << n)-1。
         *             int num = (1 << n)-1, n > num, n必須再(2 << n)-1范圍。那么num | n = (2 << n)-1 。 當(1 << n)-1與任何與它小的數字進行異或操作,結果為(2 << n)-1。
         *             注意:只有(1 << n)-1滿足這個規律。
         *  7: 與(&):   0 & 0 = 0,
         *              1 & 0 = 0,
         *              1 & 1 = 1, 如果相同位都為1,則為1,否則為0。
         *             int num = (1 << n)-1, n < num, 那么num & n = n。 當(1 << n)-1與任何與它小的數字進行異或操作,結果為n。
         *             int num = (1 << n)-1, n > num, 那么num & n =  (0-num)范圍 。
         *             注意:只有(1 << n)-1滿足這個規律。
         *  8: 異或(^): 1 ^ 0 = 1,
         *              0 ^ 0 = 0,
         *              1 ^ 1 = 0, 兩個位必須不相同
         *  9: 取反(~):  ~7 = -8,
         *              ~5 = -6,
         *              ~6 = -7,所有的正數變負數,因為高位為0,取反為1,變負數。
         */

 


免責聲明!

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



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