日期:2014-05-20  浏览次数:20597 次

请教更好的办法解决问题
有一个byte类型的16进制数据要把这个16进制数据左移一位如果是1那么就做A操作如果左移出来的是0那么就做B操作

不知道各位有什么好的做法没有?以下是我现在的做法

public   String   hexToBin(int   b){
          String   a   =   Integer.toBinaryString(b);
          for(int   i=0;a.length() <8;i++){
            a   =   "0 "   +   a;
          }
          if( "1 ".equals(a.substring(0,1))){
            System.out.println( "A ");
          }   else   {
            System.out.println( "B ");
          }
          System.out.println(a);
          return   a;
        }


------解决方案--------------------
不如把问题再说清楚一点...
最左边的那位不是符号位吗?

------解决方案--------------------
....
-6的二进制1111,1010
6的二进制0000,0110
最左边一位什么时候都是符号位
你到底要哪位?
------解决方案--------------------
没有啊,byte 的范围就是 -128~127 之间的啊,最高位就是符号位,Java 中没有无符号位的数。
------解决方案--------------------
如果被强转成了 int 的话,那符号位就没有了。

public static void main(String[] arg) {
  String s = hex2Bin((byte)5);
  System.out.println(s);
}

private static String hex2Bin(byte b) {
  int num = (int) b;
  String a = Integer.toBinaryString(num);
  for (int i = 0; a.length() < 8; i++) {
    a = "0 " + a;
  }
  if (((num > > 8) & 1) == 1) {
    System.out.println( "A ");
  } else {
    System.out.println( "B ");
  }
  return a;
}

或者你可以直接判断 Integer.toBinaryString(num) 之后的长度,小于 8 的话,那最左边的一位肯定是“0”了,等于 8 的话,最左边的一位就是“1”了。