引言
在做数据读写传输时最常用也最直观的莫过于十进制数,但是在不同应用场合、存储的方便在C语言开发时候也常采用二进制、八进制和十六进制存储数据。这边博文将对这3种进制转十进制及十进制转这3种进制做一解释并举例。
什么是进制
进制是一种计数机制,对于任何一种进制,如:
x
进制,就表示某一位置上的数运算时逢
位值计数法
位值制记数法,一种利用位值制记数的方法。位值制即每个数码所表示的数值,不仅取决于这个数码本身,而且取决于它在记数中所处的位置。
x
进制整数
x
进制采用位置计数法,位权是
十进制的整数 a0 转换 x 进制的整数过程:
为了叙述方便,
第一位: a0%x
a1=int(a0/x)
第二位: a1%x
a2=int(a1/x)
第三位: a2%x
⋯
下面不同进制之间的转换将按照位值计数法进行转换。
二进制
二进制是一种“逢二进一”的进制制,它用 0 和 1 两个符号来描述。在自然界中大多数事物都存在可用0和1表示的相对立的二个状态。在计算机中正是利用了这一特点,采用电位的高低、脉冲的有无、二极管的截止与导通、纸带上有孔无孔等来表示0、1这两个状态。
二进制转十进制:
二进制数字:
10101011
十进制数字:
1×20+1×21+0×22+1×23+0×24+1×25+0×26+1×27=1+2+0+8+0+32+0+128=171
十进制转二进制:
十进制数字:171
二进制数字:
第一位:
171%2=1
int(171/2)=85
第二位:
85%2=1
int(85/2)=42
第三位:
42%2=0
int(42/2)=21
⋯
最后计算得二进制数字:10101011
用二进制表示一个数所使用的位数要比十进制、八进制、十六进制等表示时使用的位数长得多,书写起来不方便,也不好读,这是二进制的缺陷。为此,人们通常使用八进制、十六进制来作为二进制的缩写方式。
八进制
八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。
八进制转十进制:
八进制数字:127
十进制数字:
7×80+2×81+1×82=7+16+64=87
十进制转八进制:
十进制数字:87
八进制数字:
第一位:
87%8=7
int(87/8)=10
第二位:
10%8=2
int(10/8)=1
第三位:
1%8=1
因此得十进制数:127
十六进制
十六进制,Hexadecimal,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15。
十六进制转十进制
十六进制数字:0x7fff
十进制数字:
15×160+15×161+15×162+7×163=15+240+3840+28672=32767
十进制转十六进制
十进制数字:32767
十六进制数字:
第一位:
32767%16=f
32767/16=2047
第二位:
2047%16=f
⋯
计算得16进制数字:7fff
提示C++源码中定义随机数最大值为十六进制的7fff:
/* Maximum value that can be returned by the rand function. */
#define RAND_MAX 0x7fff
总结
这里只涉及了正整数的多种进制的互相转换,后面会不断完善小数及负数的多种进制的互相转换。
参考
http://baike.baidu.com/link?url=x7cKB5xnH5J63iDQV0iyFJhV2HfwcG5nXnT8eVKeUlj5Hg2gTcqpc4vOtO21YVg3EzWxc7AtgTLBICVSiTGrD8gLACDtqAWCRNDl-3zTVpmyJNOn-q3LNpK_1eKq8p3YxxrdWNdsUI9ELUpLZOhvha
http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html
https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&context=%7B%22sourceFrom%22%3A%22bjh%22%2C%22nid%22%3A%22news_4426951029281816189%22%7D
http://baike.baidu.com/link?url=MZO5oSW-4UVEAnL6BouXuaCXvWWwlxgEL1mKsrUj_mbNi0wd2SEWrX7k-SNM3PmumaEiG97M_wU40JC8sQ229Cmm3j1XyD0omVLypIkZ4yseE5xnLOtvodNWS4TvSgM1
http://baike.baidu.com/link?url=lFnhGNtMxFhOhO-8erD44UyykbXzu1M53-zWLgZGu5gn-PZWj3vZzQRyMubzbGuQEn1MVTKJ2k_lLEZnH1SXhbZyJpALiz_xhoJmRREzmvx6xySuyNQjuLfzGL8fG_Aa