鱼C论坛

 找回密码
 立即注册
查看: 230936|回复: 10427

[扩展阅读] 进制转换

    [复制链接]
发表于 2015-12-15 02:21:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
进制转换


学习编程,尤其是底层编程,免不了要接触到各种进制数(二进制/十进制/十六进制),以及它们之间的相互转换。

先看下表:

图片1.png

不难发现,它们之间是有规律可循的。

比如 11(2)== 2^2 - 1(10);111(2)== 2^3 - 1(10);1111(2)== 2^4 - 1(10);1111 1111(2)== 2^8 - 1(10)

又比如 1111(2)== F(16),1111 1111(2)== FF(16)

注1:小括号中的数字表示进制数,即(2)是二进制的意思。

注2:脱字符(^)表示幂(次方)的意思,3^2 即 3 的 2 次幂(方)。

知道这上边两条规律,对你平时开发调试程序是很有帮助的。



比如你看到二进制数 111111,立刻就知道对应的十进制数是 2^6-1,即 2 * 2 * 2 * 2 * 2 * 2 - 1 == 63

比如你知道为何调试程序的时候调试器总会将内存中的二进制数转换为十六进制 —— 因为恰好 8 位二进制数(一个字节)用 2 位十六进制数即可表示,非常节约空间。

搜狗截图20151215162549.png

上图是十六进制,下图是二进制:

搜狗截图20151215162949.png


二进制数和十进制数之间的相互转换

二进制 -> 十进制

从二进制数转换到十进制数,我们使用“按权相加”的方法。

什么是“权”?

所谓“权”,即“位权”!

比如说一个八位的二进制数 0010 1010,从右往左(←),每个位的“位权”依次是 01234567,如下图所示:

图片2.png

下边是公式:

十进制数 == 依次将每个二进制位的值 * 2的位权次方再相加



说人话就是,上边的二进制数 0010 1010 转换成十进制数就是:

      0 * 2^7 + 0 * 2^6 + 1 * 2^5 + 0 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0

== 0 * 128 + 0 * 64 + 1 * 32 + 0 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 0 * 1

== 42

好,再举个例子,将二进制数 0100 1101 转换成十进制数就是:

      0 * 2^7 + 1 * 2^6 + 0 * 2^5 + 0 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0

== 0 * 128 + 1 * 64 + 0 * 32 + 0 * 16 + 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1

== 77

小甲鱼温馨提示:“按权相加”的方法适用于任何进制数到十进制数的转换。

二进制(补码)-> 十进制

上边的转换是对于无符号数来说的,如果万一摊上一有符号数,那转换就不是这么简单了……

当然,也不是那么复杂!



对于有符号数(补码)来说:

如果符号位为 0,表示该数为正数,转换跟无符号数没什么两样。

如果符号位为 1,表示该数为负数,此时符号位的位权不变,但该位的权值应该乘以 -1 得到。


举个栗子,将有符号数 0011 1100 转换成十进制数,与无符号数的做法是一样的:

      0 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0

== 32 + 16 + 8 + 4

== 60

然后如果符号位为 1,表示这是一个负数,比如 1011 1100,那么符号位的权值就应该乘以 -1 得到:

      -1 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0

== -128 + 32 + 16 + 8 + 4

== -68

在举个极端点的例子,比如 1000 0000:

      -1 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0

== -128

现在明白为啥 1000 0000 表示 -128 了吧~




十进制 -> 二进制

从十进制数转换到二进制数,我们使用“辗转相除”的方法。不过我们这里不是要求最大公约数,而是取其余数。

即将待转换的十进制数不断地除以 2,直到商为 0,将每次除得的余数倒序拼凑起来,便是对应的二进制数……

好吧,No pic you say a J8:

fishc.png

尼玛上边这图我画了半个小时,强迫症害死人……


二进制数和十六进制数之间的相互转换

鉴于二进制和十六进制之间有着密不可分的暧昧关系,你只需要记住下边这个表格即可:

161.png

一旦遇到很多二进制数,你就从右往左,每四个为一组,查上表(其实用不了多久你就能记住它们间的对应关系了@_@)

一旦遇到十六进制数,你心里也有底了,不过就是把每个十六进制数拆解成 4 位二进制数嘛。




这还是需要计算呐,有木有更好的方法?!

有!回复“朕想知道”,教你最快速的转换方法:

游客,如果您要查看本帖隐藏内容请回复

点评

我被微软骗去升级Win 11了555  发表于 2022-12-6 22:55

评分

参与人数 11荣誉 +39 鱼币 +28 贡献 +18 收起 理由
ACM小队RPY小队 + 5 + 1 + 1
阿宅Looker + 5 + 5 + 3 感谢楼主无私奉献!
MB404CC + 5 + 5 + 3
⑦——东方明亮 + 5 + 5 + 3 鱼C有你更精彩^_^
shriek + 2
Melanie学python + 5 + 5 + 3 感谢楼主无私奉献!
grant1944 + 2 小甲鱼NB
忆默璃 + 5
0987654321 + 5 + 5 + 3 感谢楼主无私奉献!
顾西凉 + 2 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-16 10:34:06 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-16 11:37:04 | 显示全部楼层
真想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-16 12:42:45 | 显示全部楼层
真想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-16 15:06:22 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-16 21:05:14 | 显示全部楼层
想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-17 11:17:35 | 显示全部楼层
郑想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-17 19:55:16 | 显示全部楼层
想知道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-18 14:48:41 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-18 15:55:21 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-18 20:11:06 | 显示全部楼层
支持小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-20 10:51:09 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-20 12:22:05 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-20 19:37:40 | 显示全部楼层
郑想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-22 21:59:27 | 显示全部楼层
不想知道:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-23 21:46:37 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-24 11:22:29 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-24 11:28:10 | 显示全部楼层
支持!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-24 14:29:23 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-25 15:37:16 | 显示全部楼层
联想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-21 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表