C语言中的进制关系

引言

在做数据读写传输时最常用也最直观的莫过于十进制数,但是在不同应用场合、存储的方便在C语言开发时候也常采用二进制、八进制和十六进制存储数据。这边博文将对这3种进制转十进制及十进制转这3种进制做一解释并举例。

什么是进制

进制是一种计数机制,对于任何一种进制,如: x 进制,就表示某一位置上的数运算时逢 x 进一位。例如:时间 60 ,分钟就会加 1,这就是六十进制。计算机中常用的进制有二进制、八进制、十进制、十六进制。下面将分别举例介绍这些进制及转换十进制的方法和十进制分别这几种进制的方式。

位值计数法

位值制记数法,一种利用位值制记数的方法。位值制即每个数码所表示的数值,不仅取决于这个数码本身,而且取决于它在记数中所处的位置。

x 进制整数an1a3a2a1a0转换十进制整数过程:
x 进制采用位置计数法,位权是x为底的幂。对于 n 位整数,x进制数用加权系数的形式表示如下:

a0×x0+a1×x1+a2×x2+a3×x3++an1×xn1

十进制的整数 a0 转换 x 进制的整数过程:
为了叙述方便,x进制的数据从左到右,分别记作第一位,第二位 ,int为取整。
第一位: 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值