import java.util.ArrayList;public class ToBinary_1 { public static void main(String[] args) { System.out.println(new ToBinary().getBinary(8)); } }class ToBinary { private ArrayList<Integer> list = new ArrayList<Integer>(); public void method1(int v) { list.add(0, v % 2); if (v / 2 != 0) { method1(v / 2); } } public int getBinary(int v) { method1(Math.abs(v)); int[] inch = new int[list.size()]; for (int i = 0; i < list.size(); i++) { inch[i] = list.get(i).intValue(); } StringBuffer sb = new StringBuffer(); for (int i = 0; i < inch.length; i++) { sb.append(inch[i]); } String str = sb.toString(); Integer in = Integer.parseInt(str); return v < 0 ? -in.intValue() : in.intValue(); }}
如果自己写的话:public static String myToBinaryString(String[] args) { int[] bitset = new int[32]; int value = -9807; int tmp = 1<<31; for(int i=0; i<32; i++) { bitset[i] = (value & tmp)>>>(31-i); tmp >>>= 1; } return java.util.Arrays.toString(bitset).replaceAll("[\\[\\]\\,\\s]",""); }
用这api就行了
先对每个元素求反,然后对最后一个元素+1
然后考虑进位问题即可
import java.util.ArrayList;public class ToBinary_1
{
public static void main(String[] args)
{
System.out.println(new ToBinary().getBinary(8));
}
}class ToBinary
{
private ArrayList<Integer> list = new ArrayList<Integer>(); public void method1(int v)
{
list.add(0, v % 2);
if (v / 2 != 0)
{
method1(v / 2);
}
} public int getBinary(int v)
{
method1(Math.abs(v));
int[] inch = new int[list.size()];
for (int i = 0; i < list.size(); i++)
{
inch[i] = list.get(i).intValue();
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < inch.length; i++)
{
sb.append(inch[i]);
}
String str = sb.toString();
Integer in = Integer.parseInt(str);
return v < 0 ? -in.intValue() : in.intValue();
}}
int[] bitset = new int[32];
int value = -9807;
int tmp = 1<<31;
for(int i=0; i<32; i++) {
bitset[i] = (value & tmp)>>>(31-i);
tmp >>>= 1;
}
return java.util.Arrays.toString(bitset).replaceAll("[\\[\\]\\,\\s]","");
}
public static String myToBinaryString(int value) {
int[] bitset = new int[32];
int tmp = 1<<31;
for(int i=0; i<32; i++) {
bitset[i] = (value & tmp)>>>(31-i);
tmp >>>= 1;
}
return java.util.Arrays.toString(bitset).replaceAll("[\\[\\]\\,\\s]","");
}
public static void main(String[] args) throws Throwable {
int m = -5;
int n = Math.abs(m); //取负数的绝对值
byte[] b = new byte[32];
System.out.printf("--------binary of abs(%d)----------\n", m);
for (int i=0; i<32; i++) { //获取绝对值的原码
b[i] = (byte)(n>>>(32-i-1) & 0x1);
System.out.printf("%d", (int)b[i]);
}
System.out.println("\n--------negate each byte----------");
for (int i=0; i<32; i++) { //原码的各位取反
b[i] = (byte)(~b[i] & 0x1);
System.out.printf("%d", (int)b[i]);
}
System.out.println("\n--------plus 1----------");
b[31] += 1; //取反后+1,也就是最后1位+1
for (int i=31; i>0; i--) { //然后判断是否有发生进位
if (b[i] == 2) { //发生进位
b[i] = 0;
b[i-1]++;
} else { //否则,退出循环,因为后面也不会再发生进位了
break;
}
}
b[0] %= 2; //判断最高位是否越界
for (int i=0; i<32; i++) {
System.out.printf("%d", (int)b[i]);
}
System.out.println("\n--------check----------");
System.out.println(Integer.toBinaryString(m)); //用API的结果检验转换结果
}
}
你好,可以帮忙分析下以下几句吗?
int tmp = 1<<31;
bitset[i] = (value & tmp)>>>(31-i);
tmp >>>= 1;
return java.util.Arrays.toString(bitset).replaceAll("[\\[\\]\\,\\s]","");
看不懂
* 将一个字节内的数转换成二进制字符串(有符号)
* @param b 字节型数
* @return 一个8位二进制字符串(有符号)
*/
private static String toBinaryString(byte b) {
StringBuilder build = new StringBuilder();
for(int i = 7; i >= 0; i--) {
build.append(b >> i & 1);
}
return build.toString();
}