进制转换
Posted chengmuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进制转换相关的知识,希望对你有一定的参考价值。
进制转换
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; } }
以上是关于进制转换的主要内容,如果未能解决你的问题,请参考以下文章
sql 日期转换代码片段 - Dato,120,konvertere
android.view.InflateException:二进制 XML 文件第 15 行:二进制 XML 文件第 19 行:膨胀类片段时出错