申请会员ID:wangwangwang_
申请邮箱:1664028504@qq.com
简单的解释一下这段代码
/**
* java位运算
* 按位与 & 两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0
* 例: int a = 4,b = 5; a&b ==> 结果为4
* 先把a和b转为二进制
* a = 100
* b = 101
* a&b = 100 转成十进制就是4
*
* 异或 ^ 和按位与 &相反 相同为0,不同为1,不做解释
* 移位运算
* 左 移 (<< ) 右边空出的位用0填补高位左移溢出则舍弃该高位。
* 右 移 (>> ) 左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;低位右移溢出则舍弃该位。
* a << 1 代表a转成二进制向左移一位; a >> 1 代表a转成二进制向右移一位
*/
public class C0239e {
static {
ByteBuffer.allocate(8); // 静态代码块,类加载的时候会执行
}
public static String a(byte[]bArr) { /* C0239e.a 函数*/
StringBuilder sb = new StringBuilder();
int i = 65535;
for (byte b2: bArr) {
i ^= b2 & 255; //等价于 i = i ^ (b2 & 255)
for (int i2 = 0; i2 < 8; i2++) {
// 三元运算符 (i & 1) != 0 为true i= (i >> 1) ^ 40961 否则 i = i >> 1
i = (i & 1) != 0 ? (i >> 1) ^ 40961 : i >> 1;
}
}
String hexString = Integer.toHexString(i);
// 三元运算符 (hexString.trim().length() != 4 && hexString.trim().length() == 3)
// true 返回 a.a(sb, "0", hexString) 应该有个类a,a类有个静态方法a,接受参数StringBuilder,String,String 返回一个String
// false 返回 hexString
return (hexString.trim().length() != 4 && hexString.trim().length() == 3) ? a.a(sb, "0", hexString) : hexString;
}
}
|