首先得明白byte的概念

        byte其实和int、long一样也是整型数据类型,只是它占的位个数不一样,表示的最大最小数也就有限。

        



string.format的高级用法

  格式化为多少位,不足补0

http://blog.csdn.net/u011506413/article/details/51475660


位运算计算器:

http://www.atool.org/calculator.php


http://www.yuangongju.com/   (各种工具,包括计算器。)


位运算符

http://www.cnblogs.com/zyxStar/p/4564335.html



位运算的实际应用场景

 http://blog.csdn.net/zmazon/article/details/8262185

校验工具(BBC,CRC,LRC)

 http://www.ip33.com/bcc.html


 两个相同的数异或结果为0(可用于异或校验的条件)

 


  •  取一个byte的高4位和低4位

	byte  num =   EncodingUtil.hex2byte(RecData.substring((9 + hLen) * 2, (10 + hLen) * 2))[0];
	int hNum = (num & 0xF0) >> 4;
	int lNum = num & 0x0F;

      位运算其实就是二进制运算,比如num = 33,转成二进制是100001,高位不足补0变成00100001

     0xF0转成2进制为11110000

    1)计算 num & 0xF0:

       image.png

        &0xF0:这里F其实就是为了保留高位,0就是低位全部置0.

       这样再一>>4:(注意:取高位需要右移

       image.png

        这样将0010移到低4位,这得到num的高4位的值了。

      2)num & 0x0F

        这个与1)中的原理一样:0是消除位,F是保留位。

        取的低4位就是num的低四位,不需要移动。



      

      


位运算保存多个状态:

http://blog.csdn.net/u010746364/article/details/50259205


负数的byte转换为int:

https://blog.csdn.net/Super_Me_Jason/article/details/80005851

https://blog.csdn.net/u012247356/article/details/41284165  

如果一个数A过大,用数据位数比较短的数据类型接收的话,如果接收的数据类型的最大值比这个值还小的话,那么接收后的数就会变成负A。





在AS编辑器上碰到一个见鬼的现象:

        0xFFFFFFFF 大于 4 这个表达式返回的竟然是false,将0xFFFFFFFF强转成int竟然是-1.

        用计算器可以发现0xFFFFFFFF的10进制数是4294967295,直接在AS里写还会报错,只有声明成4294967295L。

        

        百度了一下原因:

        https://bbs.csdn.net/topics/210035817