进制转换_负数的补码
作者:互联网
进制转换问题
//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