正整数的的转换已经会了,负数的绝对值的源码,取反,再加1,这一个逻辑不知道怎么用代码来表达急求。。

解决方案 »

  1.   

    Integer.toBinaryString();
    用这api就行了
      

  2.   

    要自己用原码算的话,就是维护一个bit列表
    先对每个元素求反,然后对最后一个元素+1
    然后考虑进位问题即可
      

  3.   


    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();
    }}
      

  4.   

    如果自己写的话: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]","");
    }
      

  5.   


    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]","");
    }
      

  6.   

    直接用API快,要是自己写的话,楼上的可以。
      

  7.   

    给你一个完整的转换过程的例子public class Test {
        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的结果检验转换结果
        }
    }
      

  8.   


    你好,可以帮忙分析下以下几句吗?
    int tmp = 1<<31;
    bitset[i] = (value & tmp)>>>(31-i);
    tmp >>>= 1;
    return java.util.Arrays.toString(bitset).replaceAll("[\\[\\]\\,\\s]","");
    看不懂
      

  9.   

    你会移位运算吗?会的话自己能搞出来/**
     * 将一个字节内的数转换成二进制字符串(有符号)
     * @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();
    }