有一个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;
    }

解决方案 »

  1.   

    没有啊,byte 的范围就是 -128~127 之间的啊,最高位就是符号位,Java 中没有无符号位的数。
      

  2.   

    如果被强转成了 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”了。