十进制、二进制相关转换

╰半夏微凉° 2024-03-27 13:25 162阅读 0赞

十进制(Integer) 转 二进制(String)

原生方法

  1. ------------------------------------------------------------------------
  2. Integer 提供方法
  3. ------------------------------------------------------------------------
  4. int num = 500;
  5. # 将数字转换成 10 进制字符串
  6. String s = Integer.toString(num); // 500
  7. # 将数字转换成 2 进制字符串
  8. String s1 = Integer.toBinaryString(num); // 111110100
  9. String ss1 = Integer.toString(num, 2); // 111110100
  10. # 将数字转换成 8 进制字符串
  11. String s2 = Integer.toOctalString(num); // 764
  12. String ss2 = Integer.toString(num, 8); // 764
  13. # 将数字转换成 16 进制字符串
  14. String s3 = Integer.toHexString(num); // 1f
  15. String ss3 = Integer.toString(num, 16); // 1f
  16. ------------------------------------------------------------------------
  17. String提供方法
  18. 适用于8进制,10进制,16进制,但不适用于二进制方法
  19. ------------------------------------------------------------------------
  20. int num = 500;
  21. # %d表示将整数格式化为10进制整数
  22. String format = String.format("%d", num); // 500
  23. # %o表示将整数格式化为8进制整数
  24. String format1 = String.format("%o", num); // 764
  25. # %x表示将整数格式化为16进制整数
  26. String format2 = String.format("%x", num); // 1f4
  27. # %X表示将整数格式化为16进制整数,并且字母变成大写形式
  28. String format3 = String.format("%X", num); // 1F4

自定义方法

  1. ------------------------------------------------------------------------
  2. 递归直接输出
  3. ------------------------------------------------------------------------
  4. /**
  5. * 通常十进制转其他进制使用辗转相除法来求解,取余数的倒叙作为结果
  6. * 如:例如302
  7. * 302/2 = 151 余0
  8. * 151/2 = 75 余1
  9. * 75/2 = 37 余1
  10. * 37/2 = 18 余1
  11. * 18/2 = 9 余0
  12. * 9/2 = 4 余1
  13. * 4/2 = 2 余0
  14. * 2/2 = 1 余0
  15. * 1/2 = 0 余1
  16. * 故二进制为100101110
  17. */
  18. public static void fun(int num) {
  19. int goInside = num / 2; // 当前数>=1就继续除以2
  20. if (goInside >= 1) {
  21. // 直到商为0停止
  22. fun(goInside);
  23. }
  24. int remainder = num % 2; // 这就是对当前数取余数,别的没啥
  25. System.out.print(remainder);
  26. }
  27. /**
  28. * 验证:取余数和递归调用没联系,只是影响输出顺序而已
  29. */
  30. public static void fun1(int num) {
  31. int remainder = num % 2;
  32. System.out.print(remainder);
  33. int goInside = num / 2;
  34. if (goInside >= 1) {
  35. fun1(goInside);
  36. }
  37. }
  38. fun(500); 111110100 二进制
  39. fun1(500); 001011111 仅仅验证取余数和递归调用没联系
  40. ------------------------------------------------------------------------
  41. 递归收集到集合
  42. ------------------------------------------------------------------------
  43. public static void fun1(Deque<Integer> res, int num) {
  44. int goInside = num / 2;
  45. if (goInside >= 1) {
  46. fun1(res, goInside);
  47. }
  48. int remainder = num % 2; // 这就是对当前数取余数,别的没啥
  49. res.addLast(remainder);
  50. }
  51. Deque<Integer> res = new LinkedList();
  52. fun1(res, 500);
  53. String collect = res.stream().map(String::valueOf).collect(Collectors.joining(""));
  54. System.out.println(collect); // 111110100
  55. System.out.println(Integer.toBinaryString(500)); // 111110100
  56. ------------------------------------------------------------------------
  57. 递归拼接为String
  58. ------------------------------------------------------------------------
  59. public static String fun3(int num) {
  60. if (num == 0) {
  61. // 商为0停止
  62. return "";
  63. }
  64. int remainder = num % 2; // 这就是对当前数取余数,别的没啥
  65. return fun3(num / 2) + remainder;
  66. }
  67. String s = fun3(500);
  68. System.out.println(s); // 111110100
  69. System.out.println(Integer.toBinaryString(500)); // 111110100

二进制(string) 转 十进制(int)

  1. ------------------------------------------------------------------------
  2. # res = res * 2 + numericValue;
  3. ------------------------------------------------------------------------
  4. public static void binaryToDecimal3(String binaryint) {
  5. int res = 0; // 结果收集器
  6. char[] chars = binaryint.toCharArray();
  7. for (int i = 0; i < chars.length; i++) {
  8. int numericValue = Character.getNumericValue(chars[i]); // 获取1或者0,防止转成ASCLL码
  9. res = res * 2 + numericValue; // 公式2
  10. }
  11. System.out.println("这个二进制的十进制数为:" + res);
  12. }
  13. ------------------------------------------------------------------------
  14. # res += numericValue * Math.pow(2, index++);
  15. ------------------------------------------------------------------------
  16. public static void binaryToDecimal2(String binaryint) {
  17. int res = 0; // 结果收集器
  18. int index = 0; // 遍历圈数
  19. char[] chars = binaryint.toCharArray();
  20. for (int i = chars.length - 1; i >= 0; i--) {
  21. int numericValue = Character.getNumericValue(chars[i]); // 获取1或者0,防止转成ASCLL码
  22. res += numericValue * Math.pow(2, index++); // 公式1
  23. }
  24. System.out.println("这个二进制的十进制数为:" + res);
  25. }

二进制(Integer) 转 十进制(Integer)

  1. public static void binaryToDecimal1(int binaryint) {
  2. int res = 0; // 结果收集器
  3. int remainder = 0; // 余数
  4. int index = 0; // 遍历圈数
  5. while (binaryint != 0) {
  6. remainder = binaryint % 10;//取余,从二进制后面的数先开始
  7. binaryint /= 10; // 为下一轮做准备,比如1111,得到111
  8. res += remainder * Math.pow(2, index++);
  9. }
  10. System.out.println("这个二进制的十进制数为:" + res);
  11. }
  12. binaryToDecimal2("1001101");
  13. binaryToDecimal3("1001101");
  14. binaryToDecimal1(1001101);
  15. 这个二进制的十进制数为:77
  16. 这个二进制的十进制数为:77
  17. 这个二进制的十进制数为:77

十六进制 转 十进制

  1. private static Map<Character, Integer> map = new HashMap<>() {
  2. {
  3. put('0', 0);
  4. put('1', 1);
  5. put('2', 2);
  6. put('3', 3);
  7. put('4', 4);
  8. put('5', 5);
  9. put('6', 6);
  10. put('7', 7);
  11. put('8', 8);
  12. put('9', 9);
  13. put('A', 10);
  14. put('B', 11);
  15. put('C', 12);
  16. put('D', 13);
  17. put('E', 14);
  18. put('F', 15);
  19. put('a', 10);
  20. put('b', 11);
  21. put('c', 12);
  22. put('d', 13);
  23. put('e', 14);
  24. put('f', 15);
  25. }};
  26. public static void hexToDecimal1(String number) {
  27. number = number.substring(2); // 去掉ox
  28. int res = 0;
  29. for (char ch : number.toCharArray()) {
  30. res = res * 16 + map.get(ch);
  31. }
  32. System.out.println(res);
  33. }
  34. public static void hexToDecimal2(String number) {
  35. number = number.substring(2); // 去掉ox
  36. int res = 0;
  37. int index = 0;
  38. char[] chars = number.toCharArray();
  39. for (int i = chars.length - 1; i >= 0; i--) {
  40. res += map.get(chars[i]) * Math.pow(16, index++);
  41. }
  42. System.out.println(res);
  43. }
  44. hexToDecimal1("0xAA"); // 170
  45. hexToDecimal2("0xAA"); // 170

参考

Java中二进制转换的多种方法

发表评论

表情:
评论列表 (有 0 条评论,162人围观)

还没有评论,来说两句吧...

相关阅读

    相关 十进制转换二进制

    输入一个十进制的数,将其转换为二进制!!(也适用于八进制!当然,代码中的2就要变为8了) (如有错误,欢迎提出) //十进制转换为二进制