转载请注明出处:http://blog.csdn.net/droyon/article/details/8675820
与或非,由于是直接操作二进制,因而在程序中是执行最快的语句。很多与或非可以实现很多非常巧妙的操作,在此整理一下,随时更新。
1、与或非实现信息状态的加减
package TwoCode;
public class Encode {
public static void main(String args[]){
Message message = new Message(Message.STATUS_SMS);
System.out.println(message.getStatusString());
message.addStatus(Message.STATUS_SUBJECT);
System.out.println(message.getStatusString());
message.addStatus(Message.STATUS_DRAFT);
System.out.println(message.getStatusString());
message.removeStatus(Message.STATUS_DRAFT);
System.out.println(message.getStatusString());
}
}
class Message{
public static final int STATUS_SMS = 1; //0000 0001
public static final int STATUS_DRAFT = 2; //0000 0010
public static final int STATUS_SUBJECT = 4; //0000 0100
public static final int STATUS_ATTACHMENT = 8; //0000 1000
private int mStatus;
public Message(int status){
mStatus = status;
}
public void addStatus(int status){
mStatus |= status;
}
public void removeStatus(int status){
mStatus &= ~status;
}
public String getStatusString(){
StringBuffer sb = new StringBuffer();
if((mStatus & STATUS_ATTACHMENT) >0){
sb.append("附件");
}
if((mStatus & STATUS_SUBJECT) >0){
sb.append("主题");
}
if((mStatus & STATUS_DRAFT) >0){
sb.append("草稿");
}
if((mStatus & STATUS_SMS) >0){
sb.append("短信");
}
return sb.toString();
}
}
运行结果:
短信
主题短信
主题草稿短信
主题短信
2、cdma电话号码 4bit压缩
c代码:
for ( i = 0; i < p_message->sAddress.number_of_digits; i++ )
{
DTMF[i / 2] = p_message->sAddress.digits[i];
DTMF[i / 2] = DTMF[i / 2] << 4 | p_message->sAddress.digits[i+1];
i++;
}
java代码:
int digitCount = 0;
for (int i = 0; i < numberLenReal; i++) {
char c = number.charAt(i);
if (c == '+') continue;
int shift = ((digitCount & 0x01) == 1) ? 4 : 0;
result[extraBytes + (digitCount >> 1)] |= (byte)((charToBCD(c) & 0x0F) << shift);
digitCount++;
}
所谓4bit压缩,我们知道电话号码,最小为0,最大为9,如果我们要编码这些号码,4位就足够,因而用4位压缩电话号码被称为4bit压缩。
这段代码,简单描述信息编码的原理。