zoukankan      html  css  js  c++  java
  • 进制转换

    进制转换
     
    1. 基础概念
      原码:正数的原码最高位是0,负数的原码最高位是1,其他的是数值位。
      反码:正数的反码与原码相同。负数的反码,符号位不变,其他位取反。
      补码:正数的补码与原码相同。负数的补码是反码加1.
    2. 进制转换
    (1) 其他进制到十进制
      系数:就是每一个位上的数值
      基数:x进制的基数就是x
      权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
     
      结果:系数*基数^权次幂之和。
     
    (2)十进制到其他进制
      除基取余,直到商为0,余数反转。
    3. 实现
    需求:
    流水号设计,要求数据库里存int,界面显示的时候,显示为33进制(26个字母+10个数字,去掉容易混淆的字母I, L, O)

    其实要求就是int与33进制互相转换.

    具体实现如下:

    package com.liu.algorithm;
    
    import java.util.Arrays;
    
    public class Notation {
    
       public static void main(String[] args) {        
    	String param = transform(1234567890,33);
            System.out.println("转换的进制的数为:"+ param);
            System.out.println("原始数为:"+recover(param,33));
        }
    
       // 系数集合
        public static char[] coefficients = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G',
        		'H','J','K','M','N','P','Q','R','S','T','U','V','W','X','Y','Z'};
    	
      /**
       * 进制转换
       * @param origin 需要转换的原始数值
       * @param notations 基数(进制)
       * @return 转换后的进制数
       */
        private static String transform(int origin,int notations) {
            StringBuilder sb = new StringBuilder();
            String result;
            while(origin != 0){
                sb = sb.append(coefficients[origin%notations]);
                origin = origin/notations;
            }
            result = sb.reverse().toString();
            return result;
        }
        
        /**
         * 获取原始数值
         * @param origin 转换后的进制数
         * @param notations 基数(进制)
         * @return 原始数值
         */
        private static int recover(String origin,int notations) {
            StringBuilder sb = new StringBuilder(origin);
            String string = sb.reverse().toString();
            char[] chars = string.toCharArray();
            int result = 0;
            int scale = 1;
            for (char cha : chars) {
          int coefficient = Arrays.binarySearch(coefficients,cha);
          result += coefficient*scale;
          scale *= notations;
         }
            return result;
        }
    }
    

      

  • 相关阅读:
    悄摸直播(一)—— 推流器的实现(获取笔记本摄像头画面,转流推流到rtmp服务器)
    MySQL知识-MySQL同版本多实例的配置
    Jumpserver-跳板机的搭建
    搭建本地的yum仓库-较简单
    监控-zabbix
    Git-Jenkins-代码的上线
    ELK-日志管理平台
    简单的认识Linux
    工作碰上的技术问题及处理经验(三)
    oracle数据库应用开发经验
  • 原文地址:https://www.cnblogs.com/chengmuyu/p/10703284.html
Copyright © 2011-2022 走看看