请教更好的办法解决问题
有一个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”了。