作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦

CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者

配套项目资料

https://github.com/SunLtd/LearnJava
https://gitee.com/sunyiyi/LearnJava

前言

在上一篇文章中,壹哥给大家讲了Java里的各种运算符。其中在讲解位运算符时,我给大家提到了计算机中进制的概念。但是现在很多小白同学,对进制的概念还不够了解,比如二进制、八进制、十六进制都是怎么回事?有什么特点?进制之间怎么转换?原码、反码、补码都是什么意思?......这些问题还困扰着很多童鞋。所以今天壹哥会再利用一篇文章,专门给大家讲解计算机中进制相关的内容,尤其是二进制,你需要认真阅读哦。

----------------------------------------------前戏已做完,精彩即开始--------------------------------------------

全文大约【3600】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图视频,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

一. 进制

1. 概念

首先我们得知道进制的概念。所谓的进制,也叫做进位计数制,这是人为定义的带进位的计数方法。当然也有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法等。

任何一种进制,每一位上的数在运算时都是满X进一位。比如十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,X进制就是逢X进1位。以我们最熟悉的十进制为例,每逢十进一,当数为19时,下一位数的尾数便满足该进制的最大数,于是下一位末位清零,前置位+1,变成20。

2. 分类

在计算机中,目前常用的进制有如下几种:

  • 十进制;
  • 二进制;
  • 八进制;
  • 十六进制

因为在计算机的底层只能处理二进制格式的数据,也就是0和1,其他的文字、数字、字符等信息都要转换成二进制的格式,计算机的底层才能识别处理。所以作为一个程序员,二进制是我们必须要理解和掌握的哦。

进制介绍相关的配图视频链接如下;

bilibili html5 player

3. 二进制

作为一个程序员,必须要掌握的进制就是二进制了,其实我们只需要参考十进制就可以很容易理解进制的问题了。所谓的二进制,里面只有0和1,且满二进一,所以在二进制里是看不到>=2的数的。比如二进制的前10位数分别是0、1、10、11、100、101、110、111、1000、1001。

4. 八进制

八进制中有0~7共8个数字,但没有8哦,其规则是满八进一,所以7的下一位数不是8,而是10。17的下一位数不是18,而是20。比如八进制的前10位数分别是0、1、2、3、4、5、6、7、10、11......

5. 十六进制

十六进制中有0~F共16个数字,同样没有16,其规则是满十六进一。在十六进制中,这16个数字分别是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。即9的下一位不是10,而是A,10这个数只是十进制的衍生物,这一点大家要注意!

同理,在十六进制中,19的下一位不是20,而是1A,1F的下一位才是20;99的下一位是9A,FF的下一位才是100。

6. 原码、反码与补码

6.1 原码

对一个正整数来说,所谓的原码,就是指一个整数对应的二进制,比如整数10的原码就是00001010。所以原码就是一个正整数原本对应的二进制形式。但负数的原码和正数却不一样,负数的原码要将正数原码的符号位(最高位)改为1,比如-10的原码就是10001010。

6.2 反码

正数的反码就是其原码,即正数的原码和反码完全相同。而负数的反码则是将原码中除符号位以外的所有位(数值位)都取反,即 0 变成 1,1 变成 0。如10的原码和反码都是00001010,而-10的原码是10001010,反码则是11110101。

6.3 补码

正数的补码就是其原码,所以正数的原码、反码、补码都相同。而负数的补码是其反码加1,-10的原码是10001010,反码则是11110101,补码则是11110110。我们可以认为,补码是在反码的基础上打了一个补丁,进行了一点修正,所以叫做“补码”。

所以原码、反码、补码的概念只对负数有实际意义,对于正数来说,原码、反码、补码其实都是一样的,如下图所示:

关于原码、反码和补码的相关视频,链接如下:

bilibili html5 player

了解完这些进制的概念之后,接下来壹哥就给大家讲解最重要的进制转换问题,拿出小本本做好记录哦,重点来啦。

二. 进制转换

1. 十进制和二进制的转换(掌握)

首先我们来学习十进制与二进制之间的转换,这是必须要掌握的哦。

1.1 十转二

如果我们想将十进制转为二进制,可以采用辗转法,将十进制除以2再取余然后将余数和最后的1按照从下向上倒序写的方法。例如我们想将十进制的302转为对应的二进制,过程如下:

302➗2 = 151 余0

151➗2 = 75 余1

75➗2 = 37 余1

37➗2 = 18 余1

18➗2 = 9 余0

9➗2 = 4 余1

4➗2 = 2 余0

2➗2 = 1 余0

1➗2=0 余1

我们将上面每一步得到的余数和最后的1,按照从下向上倒序的方式进行编写,所以302对应的二进制数为100101110。

1.2 二转十

如果我们要把二进制转为十进制,有两种计算方法。

第一种计算方法,是把二进制从最高位(最左边的“1”)开始,先按照从上到下的顺序写出来。先从第1位开始计算0*2,如果每一位上对应的余数是1,在乘以”2“之后还要再加”1“,否则就加0。接着用上一次计算得到的结果乘以2,后面再加1或者是0,以此类推。壹哥给大家用下面的例子进行演示:

例如:100101110

1…………0✖️2+1=1…………余数为1

0…………1✖️2+0=2………… 余数为0

0 …………2✖️2+0=4 ………… 余数为0

1 …………4✖️2+1=9……………… 余数为1

0…………9✖️2+0=18 ……………… 余数为0

1 …………18✖️2+1=37 …………余数为1

1…………… 37✖️2+1=75…………余数为1

1………………75✖️2+1=151………… 余数为1

0………………151✖️2+0=302 ………… 余0

通过这样的计算,我们就可以得到最终的十进制数302

第一种计算方式其实有点复杂,我们可以采用更简单的第二种计算方法。该方法是从最低位开始,每位上的数字*2的N次幂,N从0开始记数(0、1、2......),把每一位的乘积进行累加就是最后的结果。我们把上面的例子换成该方法进行计算,会如下所示:

1*2^8 + 0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 0*2^0 = 302

其实根据第2种计算方法,你可以发现规律。最低位上计算出来的十进制结果最大值就是1,往前一位的最大值是2,以此类推,4、8、16、32、64、128、256.....

所以如果该二进制位上是1,该位置上肯定可以得到对应的十进制最大值,否则只能得到0。比如11111111转成对应的十进制,就可以直接计算:1+2+4+8+16+32+64+128=255

壹哥个人推荐采用这种方式进行计算,简单快捷,基本上我们熟悉之后就可以直接口算出结果。

2. 二进制和八进制的转换(了解)

2.1 八转二

如果你想将八进制转为对应的二进制,可以先将八进制里的每一位一隔,然后分别将每一位换算成3位二进制的格式。比如八进制的764转成对应的二进制111110100,过程如下图所示:

2.2 二转八

如果你想将二进制转为对应的八进制,可以从低位到高位,每三位一隔,将当前三位按照(4 2 1)的方式还原成对应的1位八进制。比如我们将二进制的1100101011转成对应的八进制1453,过程如下图所示:

3. 二进制和十六进制的转换(了解)

3.1 十六转二

如果你想将十六进制转为对应的二进制,可以先将十六进制里的每一位一隔,然后分别将每一位换算成4位(8 4 2 1)二进制的格式。比如十六进制的a8f5转成对应的二进制1010 1000 1111 0101,过程如下图所示:

3.2 二转十六

如果你想将二进制转为对应的十六进制,可以从低位到高位,每四位一隔,将当前四位按照(8 4 2 1)的方式还原成对应的1位十六进制。比如我们将二进制的11 1010 0010 1010转成对应的十六进制3a2a,过程如下图所示:

4. 负数的二进制(了解)

不仅正数可以有对应的二进制,负数也有对应的二进制。在计算机中,任何数据都是以补码的形式进行存储的。正数的原码、补码和反码都完全一样。但是负数的原码、反码、补码却不一样:

负数的原码=将正数的原码符号位(最高位)改为1;

负数的反码=符号位不变,其他位取反;

负数的补码=负数的反码+1。

壹哥在之前的文章中讲过,计算机中,最高位表示符号位,0表示正数,1表示负数。接下来壹哥就以-24和-68为例,给大家讲一下负数的二进制转换。

4.1 负数转为二进制

根据前面的内容,我们可以计算出正数24的原码是00011000(反码、补码也是这个)。所以-24对应的原码就出来了,我们直接将00011000的最高位改成1就行了,即-24的原码是10011000。于是,-24的反码也出来了,最高位不变,其余位全部取反,反码就是11100111。而-24的补码则是反码+1,所以-24的补码=11101000。如下图所示:

4.2 二进制转为负数

既然我们可以将负数转为对应的二进制,当然也可以逆运算。假如我们现在有个二进制,补码是10111100(高位是I表示负数),我们要按照负数转二进制的逆运算进行操作。先计算出该补码对应的反码,反码=补码-1,即反码=10111100-1=10111011。接着根据反码计算出原码,原码=符号位不变,其他位取反=11000100。所以最终对应的十进制数是-68。

5. 小数的二进制(了解)

另外小数和二进制之间也可以实现转换。

5.1 小数转二进制

12.02 0.02*2=0.04

如果我们想将小数转为对应的二进制,整数和小数是分开计算的。如果有整数,则把整数单独转为对应的二进制。小数部分的计算则相对麻烦,主要是小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0。例如小数0.125的具体转换过程如下:

  1. 将小数部分0.125乘以2,得0.25,取整数部分0记录下来;
  2. 再将小数0.25乘以2,得0.5,再取整数部分0记录下来;
  3. 再将小数部分0.5乘以2,得到整数1.0,再取整数部分1记录下来。因为1.0的小数点后为零,结束乘2的循环过程。

最终我们得到0.125对应的二进制结果0.001,如下图所示:

5.2 二进制转小数

如果我们想将二进制转为对应的小数,可以从小数点以后开始,依次将当前位数上的数字乘以2的-1到-N次方,再累加。比如我们想将0.0101转为对应的小数,则是0*2-1+1*2-2+0*2-3+1*2-4=0.3125。如果你口算不出来结果,可以用计算器哦。

-------------------------------------------正片已结束,来根事后烟-----------------------------------------

四. 结语

至此,壹哥就把计算机中的进制问题给大家讲解完毕了。现在你对进制转换都掌握了吗?其实今天的内容,与Java没有太大关系,所有关于编程开发或计算机技术相关的学习,都应该有进制的基础。所以学习完今天的内容之后,对我们加深理解计算机的底层也是很有帮助的哦。

在下一篇文章中,壹哥会继续带你学习Java里的知识,不要错过哦。另外如果你独自学习觉得有很多困难,可以加入壹哥的学习互助群,大家一起交流学习。

五. 配套视频

如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看壹哥帮你筛选出的视频教程。与本文配套的Java学习视频,链接如下:

bilibili html5 player

六. 今日作业

1. 第一题

将十进制的520转为二进制,并在评论区给出你的答案,看看你对壹哥的爱有多深,hiahia

2. 第二题

将00110101转为对应的十进制,在评论区给出你的答案。

15从零开始学Java之详解计算机中的进制转换相关推荐

  1. 44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法

    作者:孙玉昌,昵称[一一哥],另外[壹壹哥]也是我哦 千锋教育高级教研员.CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 前言 经过前面几篇文章的讲解,我们现在已经对面向对象有了基本的认知, ...

  2. 12从零开始学Java之详解必须掌握的数据类型

    作者:孙玉昌,昵称[ 一一哥],另外[ 壹壹哥]也是我哦 CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 配套开源项目资料 GitHub地址: https://github.com/SunL ...

  3. 详解安卓Gravity的进制封装

    详解安卓Gravity的进制封装 前言 安卓中的部分控件中有一个setGravity的方法,可以使用它设置View内重力的方向. 以LinearLayout为例,它的使用是这样的 LinearLayo ...

  4. 计算机进制转换图,计算机等级考试进制转换及常用函数

    计算机等级考试进制转换及常用函数 十进制转二进制:用2连续相除结果为1将余数和最后的1从下向上倒序排写:如:302302/2=151 余0151/2=75 余175/2=37 余137/2=18 余1 ...

  5. IOS笔记-计算机中的进制 反码补码 和存储细节

    1.计算机中的进制 计算机能够识别的只有二进制 0.1 进制就是一种计量的单位 2.常见的进制: 二进制:逢二进一  用0.1来表示,定义一个二进制的数:0b 或者 0B  ,0B1010(2)=10 ...

  6. 计算机中的进制 进制转换 位运算符号

    进制 计算机内部是由 IC(intergrated Ciruit)这种电子部件构成, CPU 和内存也是 IC 的一种,IC的所有引脚只有直流电压 0V 或 5V两个状态,也就是说 IC 的一个引脚只 ...

  7. JAVA笔记整理(1):进制转换

    JAVA笔记整理(1):进制转换 16.2.28 深圳坪山 多云 18℃ 爱吃螺蛳粉的巴赫 摘要:工具类转化函数:关于进制--2/10/16进制转化(Util_transform_scale)- ps ...

  8. 计算机文化进制的转换,计算机文化基础-进制转换.pptx

    计算机文化基础-进制转换 计算机文化基础职业院校教学改革实验教材主编:龙天才高等教育出版社任务1.1:了解数制又叫进位计数制,指的是一种计数规则数制在日常生活中,人们广泛使用的是十进制数,有时也会遇到 ...

  9. 4、计算机中的进制数转换(十进制、二进制、八进制、十六进制)

    目录 课前先导 一.计算机中的进制数 十进制(简写:D) 二进制(简写:B) 八进制(简写:Q) 十六进制(简写:H) 二.计算机进制数之间的转换 1.十进制转二进制 2.十进制转八进制 3.十进制转 ...

最新文章

  1. 使用Shell(bash) 来检查 git 本地某个分支是否存在
  2. 【干货】智能电视UI设计那些事儿
  3. Focus on the Good 专注于好的方面
  4. java返回json格式的状态码数据(二)
  5. 二分搜索 HDOJ 2289 Cup
  6. iOS6.0以上版本,关于NSDateFormatter的问题
  7. 【每日一题】5月7日题目精讲 「火」皇家烈焰
  8. eclipse 项目 链接 oracle 空指针,Eclipse 常用配置技巧
  9. android线程卡死,Android主线程为什么不因为Loop死循环卡死
  10. 合作︱2018CCF青年精英大会首设科技创业竞赛,快来报名吧!
  11. VIM使用系列:quickfix功能
  12. 阿里云助贫困大学生用技能点亮人生
  13. canon l11121e驱动_佳能L11121e驱动
  14. spring5-介绍Spring框架
  15. 左手鼠标指针_使您的鼠标指针左手友好
  16. ie 11 打印 iframe 404 降级解决方案
  17. 网络篇 网络设备的基本配置09
  18. Meta Connect汇总:Quest Pro发布,主打生产力场景
  19. 中国天气网天气api接口 天气预报调用方法 2020
  20. 使用 ArcGIS Pro 对一幅没有空间参考的老照片进行配准

热门文章

  1. 2、sipeed Maix Bit开发板使用小记(二)
  2. Ubuntuh桌面版12.04 32bit和64bit和13.04 32bit和64bit下载地址
  3. 从员工到总监:我所学到的,非常多人花十年也学不到
  4. android 崩溃 定位,Android Crash问题定位与实践
  5. idea的热键占用问题解决方法
  6. Eclipse基于Maven的MyBatis开发教程详解
  7. python人脸识别理论_简述几种人脸识别的主要方法
  8. msn,qq,etc 使用的端口总结3
  9. 最全的获取鼠标坐标的方法
  10. 服务器+固态硬盘安装Ubuntu16.04,重启黑屏(已解决)