进制转换技巧_进制转换的方法

进制转换技巧_进制转换的方法8进制和16进制转2进制,以及2进制转8进制和16进制,都可以使用8421法快速得到转换后的结果,小数据和大数据都适合,口算都行_十进制83转为十六进制

进制转换技巧_进制转换的方法"

进制转换基础知识及方法

今天复习和深入了解了进制的转换的相关知识,突然想起有个博客,那就顺便记一下吧。

=====================================
8进制和16进制转2进制,以及2进制转8进制和16进制,都可以使用8421法快速得到转换后的结果,小数据和大数据都适合,口算都行。
例如: 16进制的 7c 转2进制

要凑的数 8 4 2 1 说明
7 0 1 1 1 7=4+2+1
c 1 1 0 0 c=8+4

最终2进制结果为: 0111 1100

例如: 8进制的 62 转2进制

要凑的数 4 2 1 说明
6 1 1 0 6=4+2
2 0 1 0 2=2

最终2进制结果为: 110 010

总结:16进制转2进制用到的列为8421,而8进制转2进制用到的列为421

那么逆方向呢?2进制分别转8和16进制如何做?很简单,反过来即可。
例如: 2进制的 001 001 100 转8进制
(低位开始,三个为一组,不够就补零)

要凑的数 4 2 1 说明
001 0 0 1 =1
001 0 0 1 =1
100 1 0 0 =4

最终8进制结果为: 114 (上往下数)

例如: 2进制的 0111 1000 0101 转16进制
(低位开始,四个为一组,不够就补零)

要凑的数 8 4 2 1 说明
0111 0 1 1 1 7=4+2+1
1000 1 0 0 0 8=8
0101 0 1 0 1 5=4+1

最终16进制结果为: 785

再介绍一个两位数的8和16转10,以及10转8和16进制的方法,适合口算,如下

问:8进制的17对应的10进制应该是?
答:因为8进制是逢8进一,十位上的1表示进过了8,个位是7,所以8+7=15,对应的10进制是15。
同理,8进制的23对应10进制应该是,2*8+3=19。

问:16进制的3d对应的10进制应该是?
答:因为16进制是逢16进一,十位上的3表示进过了3个16,个位是d,d代表13,所以316+13=61,对应的10进制是61。
同理,16进制的2b对应10进制应该是,2
16+11=43。

问:10进制的34对应的8进制应该是?
答:因为8进制是逢8进一,因为34除8,所以商为4,余数为2,所以34/8=4—2,表示有4个8以及一个2,所以对应的8进制是42。
同理,10进制的56对应8进制应该是,56/8=7—0,结果是70。

问:10进制的83对应的16进制应该是?
答:因为16进制是逢16进一,因为83除16,所以商为5,余数为3,所以83/16=5—3,表示有5个16以及一个3,所以对应的16进制是53。
同理,10进制的97对应16进制应该是,97/16=6—1,结果是61。

总结:10进制转8和16进制,用的是除法(除去目标进制数得到商,搭配余数),而8和16转10进制,用的是乘法(十位乘,加个位)。

最后的最后,就是我自己用js实现的,任意进制转10进制,对应的10进制转任意进制。这个任意进制,只要符号个数满足,几百几千的进制都可以。
10进制转其他进制的原理用的是除法,除到商为0,倒序取余数。
其他进制转10进制的原理用的是那个乘法有幂运算的那个,最终结果相加即可。

附上我自己写的进制转换的JavaScript写法

u.shi2QiTaJinZhi = function (num, jz) { /* 

console.log(Number.MAX_SAFE_INTEGER); // 40991 大于这个数将会出现错误,丢失精度
console.log(40991 === (40991+1), 5 === (5+1)); // false false
console.log(40992 === (40992+1), 5 === (5+1)); // true false 大于这个数将会出现错误
console.log(40990 === (40990+1), 5 === (5+1)); // false false

console.log(‘Number.MAX_VALUE=’,Number.MAX_VALUE); // 最大正数(取负数是是最小数) 返回科学计数法 1.23157e+308
console.log(‘Number.MAX_VALUE=’,Number.MIN_VALUE); // 最小正数 返回科学计数法 5e-324
*/
var aa = ‘abcdefghijklmnopqrstuvwxyz’.split(‘’);
//var aa = ‘甲乙丙丁戊己庚辛壬癸子丑寅卯辰巳午未申酉戌亥乾兑离震巽坎艮坤’.split(‘’);
console.log(‘查看支持的进制符号长度’, aa);
if(jz>aa.length+10) console.log(‘警告,最大进制不可超过’+(aa.length+10)+‘,最小不能小于2,否则可能出现不准确的情况’);
if (jz == 1) return;
if (!(/^\d+$/.test(num))) { console.log(‘警告,此十进制数 ’ + num + ’ 不是一个正整数(请勿包含空格) !’); return; }
if (num > Number.MAX_SAFE_INTEGER) { console.log(‘警告,此十进制数 ’ + num + ’ 已超过最大安全整数 ’ + Number.MAX_SAFE_INTEGER + ’ !’); return; }
var yu,shang,arr=[];
do{

yu = num%jz;
shang =parseInt( num/jz);
console.log(‘余数和商分别为:’,yu,shang);
num=shang;
arr.push(yu);
}while(shang>0)
arr.reverse();
var aa2=[10];
for(var i=1;i<aa.length;i++){

aa2[i]=aa2[i-1]+1;
}
console.log(‘查看字母aa:’,aa);
console.log(‘查看字母应该代表的数字aa2:’,aa2);
console.log(‘先模后除汇总的余数集合,arr:’,arr);
function arr_getIndex(val){

for(var i=0;i<aa2.length;i++){

if(aa2[i]==val) return i;
}
}
if(jz >= 11){

for(var i=0;i<arr.length;i++){

if(arr[i] >= 10){

var ind = arr_getIndex(arr[i]);
arr[i]=aa[ind]==undefined?‘空’:aa[ind];
}
}
}
console.log(‘处理转换为字母后的余数集合,arr:’,arr);
return arr.join(‘’);
}

u.qiTaJinZhi2Shi = function (num,jz){ var aa='abcdefghijklmnopqrstuvwxyz'.split(''); if(jz>aa.length+10) console.log('警告,最大进制不可超过'+(aa.length+10)+',最小不能小于2,否则可能出现不准确的情况'); if(jz==1) return; var aa2=[10]; for(var i=1;i<aa.length;i++){ aa2[i]=aa2[i-1]+1; } function arr_getValue(val){ for(var i=0;i<aa.length;i++){ if(aa[i]==val) return aa2[i]; } } var num_arr = (num+'').split(''); num_arr.reverse(); var sum=0, val=0; for(var i=0;i<num_arr.length;i++){ if(isNaN(num_arr[i]) == true){ val = arr_getValue(num_arr[i]); val = val == undefined?'0':val; }else val = parseInt(num_arr[i]); sum += val * Math.pow(jz, i); //console.log('val jz i 分别为:',val,jz,i); } return sum; /* 十进制转任意进制,用取模取余的方法。任意进制转十进制就用幂的那个方法。再说明一个8421法,十六和八进制转二,二转八和十六进制,操作简单就是画个表就OK了,用惯了口算都行。另外口算两位数的8和16与10的互转也是没问题的,主要看各位的数值,具体看收藏的标签 */ } /** * 获得指定范围的随机整数。返回包含最小值和最大值。 * @param {int} min 最小值 * @param {int} max 最大值 */ u.funRandomNum = function (min, max) { var range = max - min; var rand = Math.random(); var num = min + Math.round(rand * range); return num; } 

今天的文章
进制转换技巧_进制转换的方法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/81222.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注