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,变负数。
         */

 

转载于:https://www.cnblogs.com/WanghHongLin/p/9527976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值