首先 0xa9的值是 169 所以 a=169-127-128=-86 因为有0的位置 ,所以是-87
下面 Byte.decode,查看源码便可以知道
转成了integer,也就是 169 ,下面判断了 是否 在 -128到 127之间,很明显 ,不在 ,所以报错 !
位运算啊! 自己写个方法 /**对位赋值操作 参数: CtrlF:控制标志位(我觉得你应该是这个意思。) index:需要复制的标志位位置 value:需要付给的值 */ public void setCtrlF(byte CtrlF,int index,byte value){ if(value<0||value>1){ return//出错,赋值非0,1。如果想要优雅点,你应该在这里抛出自己的异常。 } value<<index//value左移index位 CtrlF= CtrlF ^ value//异或value }