其他分享
首页 > 其他分享> > 进制转换_负数的补码

进制转换_负数的补码

作者:互联网

进制转换问题


//1、把⼀个⼗进制数转为八进制
//思路:用do{}while();循环,保证str里有数字
//每次循环num先取余8拼到str里,之后num整除8赋值给自己,直到num到0为⽌。
public static String decToOct(int num) {
    if (num < 0) {
        //          -10的二进制是:   ‭1_777_777_777_777_777_777_766‬
        //            10的八进制是   0_000_000_000_000_000_000_012
        //            所以,八进制正数是最高位是0
        //            八进制负数是最高位是1
        return"num<0";
    }
    String str = "";
    do {
        int mod = num % 8;
        str = mod + str;
        num /= 8;
    } while (num != 0);
    return str;
}

//2、把⼀个⼗进制数转为二进制
//思路:同理
public static String decToBin(int num) {
    if (num < 0) {
        //          -10的二进制是:   ‭(57个1)_1111_0110‬
        //            10的二进制是   ‭(57个1)_0000_1010
        //            所以,二进制正数是最高位是0
        //            二进制负数是最高位是1
        return"num<0";
    }
    String str = "";
    do {
        int mod = num % 2;
        str = mod + str;
        num /= 2;
    } while (num != 0);
    return str;
}

//3、把⼀个⼗进制数转为⼗六进制
//思路:多了ABCDEF分别对应10进制的10,11,12,13,14,15
//创建一个数组,进行数组下标对应,不用if判断了
public static String decToHex(int num) {
    if (num < 0) {
        //          -10的⼗六进制是:   ‭FFFF_FFFF_FFFF_FFF6‬
        //            10的⼗六进制是   0000_0000_0000_000A
        //            所以,⼗六进制正数是最高位是0
        //            ⼗六进制负数是最高位是F
        return"num<0";
    }
    char[] chars = "0123456789ABCDEFG".toCharArray();
    String str = "";
    do {
        int mod = num % 16;
        str = chars[mod] + str; //取出余数,拼接
        num /= 16;
    } while (num != 0);
    return "ox"+str;
}

标签:777,进制,位是,补码,000,负数,num,八进制
来源: https://www.cnblogs.com/k-class/p/14193257.html