专栏首页微光点亮星辰进制之间如何转换

进制之间如何转换

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。

  • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
  • 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
  • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

进制之间如何转换

文本关键字:二进制、十进制、进制转换、八进制、十六进制

一、进制

大家最开始接触的数字和计算方法都是基于十进制的,那么进制的意思也就是一种计数方法。根据相应的进制规则进行进位,相同的一串数字在不同的进制下也会对应不同的大小,所以在程序中都会对数字的进制有明确的标识。

1. 十进制

十进制就是满10进1,那么每一位上的数字范围也就只能是0~9,也是默认使用的进制。

2. 二进制

二进制就是满2进1,那么每一位上的数字范围也就只能是0或1,Java中使用0b开头。

3. 八进制

八进制就是满8进1,那么每一位上的数字范围也就只能是0~7,Java中使用0开头。

4. 十六进制

十六进制就是满16进1,对于大于10的数字从字母A开始进行代表,即A代表10,B代表11,F代表15,那么每一位上的数字范围也就只能是0~F,Java中使用0x开头。

二、十进制与二进制的转换

在最开始接触编程时总要学习一下和二进制的转换,因为这是计算机在工作时使用的进制,很多位运算的操作也是在二进制下进行的,所以我们必须要掌握与二进制相关的进制转换。

1. 二进制转换为十进制

将一个其他进制数转换为十进制数的过程其实就是根据相应的进制来进行换算。在转换之前我们先来看一下我们最熟悉不过的十进制,比如:1367。看到这个数字我们都会毫不犹豫的说出:一千三百六十七,这是我们习以为常的事情,但是具体的过程是什么呢?

  • 1367 = 7 × 1 + 6 × 10 + 3 × 100 + 1 × 1000
  • 1367 = 7 × 10^0 + 6 × 10^1 + 3 × 10^2 + 1 × 10^3

从上面的步骤可以看出,其实一个数字的解读其实是从右向左进行的,只不过由于我们对于十进制太过了解所以忽略了这个步骤,那么用这个数字感受一下:1237173927,我猜你一定是在从右往左,从个位开始数,到底是多少吧?那么其他进制的运算规则也是如此,现在我们就来读几个二进制数。

  • 101:1 × 2^0 + 0 × 2^1 + 1 × 2^2 = 5
  • 10010:0 × 2^0 + 1 × 2^1 + 0 × 2^2 + 0 × 2^3 + 1 × 2^4 = 18
  • 1010101:1 × 2^0 + 0 × 2^1 + 1 × 2^2 + 0 × 2^3 + 1 × 2^4 + 0 × 2^5 + 1 × 2^6 = 85

恭喜,我们的进制转换已经完成了。方法就是从右至左,将乘得的结果进行相加。同时,我们注意到,只要末位是0,那么这个数一定可以被2整除,其他进制也有这个规律(就像个位为零的数一定可以被10整除)。

2. 十进制转换为二进制

  • 常规方法:

将一个十进制数转换为一个二进制数的过程其实就是一个不断算除法和记录余数的过程,既然是转换为二进制,那么我们的除数就是2,具体过程如下:10进制数:37 -> 二进制结果:100101

  • 小数字快速转换法:

对于不是很大的数字其实有一种比较快的转换办法,但是前提是我们要对2的次方的运算结果比较熟悉,基本上记忆到2的10次方为1024就足够用了。方法就是我们将一个十进制数直接拆解为几个2的n次方加和的形式,从最大的数开始。比如对于37,最大的二进制数是32,接下来是4,然后是1,那么等式就是:37 = 32 + 4 + 1。

  • 32是2的5次方
  • 4是2的平方
  • 1是2的零次方

所以对应的二进制数的第6个位置,第3个位置,第1个位置上的数字为1(需要错开一位),其他为0。用这种方法也能够快速的知道最高位为1的位置,可以很流畅的按照从左至右的顺序直接将二进制写出来,但是对于大的数字就不太适用了。

本文分享自微信公众号 - 微光点亮星辰(SandTower),作者:沙塔的哲学

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Git 常用指令

    1. >> git config --global user.name <Your name>

    聚沙成塔
  • 锋利的jQuery第八期

    上一期介绍了属性过滤选择器,提到了正则,那这次还是稍微说说吧,首先是不等于,开头以及结尾。原效果图如下:

    聚沙成塔
  • redis-jedis与spring整合

    本篇将续讲上篇redis的单机版,集群版以及jedis的操作文章,如有不理解可先阅读之前讲redis的文章。

    聚沙成塔
  • IPv6,到底是什么?

    通知的具体内容我就不贴出来了,主要意思就是:国家要大力推动IPv6的规模化部署,因此,我们提出了一些具体举措,敦促手机终端、承载网络、数据中心等全面支持IPv6...

    鲜枣课堂
  • 理解负载均衡(Load balance)

    负载均衡(Load balance),是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或者其他资源中分配负载,已达到最优化资源使用...

    kevinfaith
  • 2016美团面试经历

    java方面 java中的引用有几种? Java中的threadlocal是怎么用的? threadlocal中的内部实现是怎么样的? 哪种引用? java...

    lyb-geek
  • 网易利用人工智能从自拍中创造3D游戏角色

    在角色扮演游戏(RPG)中,如现代经典犯罪游戏侠盗猎车手,许多玩家是根据自己的形象来塑造游戏中的角色。但是现在的内置字符定制系统越来越复杂,它们可能需要手动调整...

    AiTechYun
  • 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较

            在《朴素、Select、Poll和Epoll网络编程模型实现和分析——模型比较》一文中,我们分析了各种模型在处理短连接时的能力。本文我们将讨论处...

    方亮
  • 多年管理系统开发经验总结~代码解决方案

    最近的你有没有接手的新项目,对这个有什么感觉?我最近接手了一个项目,先不论是否代码行数的多少,仅是思路就很混乱,像是一件衣服在打补丁,而衣服上还有混乱的线网,数...

    zz_jesse
  • 豪取BAT!超详细暑期实习算法面经(非科班无论文)

    本人基本情况:211本硕,本科电子信息工程,硕士通信与信息系统,典型的非科班,无论文,两段实习经历(均为算法岗,非大厂,一段CV,一段NLP)。

    kaiyuan

扫码关注云+社区

领取腾讯云代金券