有个按位取反算法,我看不懂,想请教各位一下private byte[] change(byte[] buff){
for(int i=0;i<=buff.length;i++){
int b=0;
for(int j=0;j<8;j++){
int bit=(buff[i]>>j&1)=0?1:0;
b+=(1<<j)*bit;
}
buff[i]=(byte)b;}
return buff;}下面这2句是什么意思呀? int bit=(buff[i]>>j&1)=0?1:0;
b+=(1<<j)*bit;不是有一个按位取反的符号吗?(~)直接~buff
不就行了吗?干嘛搞那么复杂啊?不解了,向各位请教!
for(int i=0;i<=buff.length;i++){
int b=0;
for(int j=0;j<8;j++){
int bit=(buff[i]>>j&1)=0?1:0;
b+=(1<<j)*bit;
}
buff[i]=(byte)b;}
return buff;}下面这2句是什么意思呀? int bit=(buff[i]>>j&1)=0?1:0;
b+=(1<<j)*bit;不是有一个按位取反的符号吗?(~)直接~buff
不就行了吗?干嘛搞那么复杂啊?不解了,向各位请教!
这个算法在JAVA里面是多此一举
目前我还看不出来它有什么优点
byte是带符号的
b+=(1 <<j)*bit; 如果对二进制不熟悉的话 恐怕比较难理解了
这里很难用纯文字表述清楚 就简略说一下作用
byte是8位二进制
int bit=(buff[i]>>j&1)==0?1:0;右移相应的位数和1做与操作,用来模拟二进制
b+=(1 <<j)*bit; 计算出对应位应表示的十进制,然后组成该字节对应的十进制数字
private byte[] change(byte[] buff){
for(int i =0;i<buff.length;i++)
{
buff[i]=(byte)~buff[i];
}
return buff;
}