进位计数制的基本概念

​ 将数字符号按顺序排列成数位,并遵照某种由低到高的进位方式计数表示数值的方法,称作为计数制。

十进制

十进制计数制由0、1、2、3、4、5、6、7、8、9共10个数字符号组成。相同数字符号在不同的位数上表示不同的数值,每个数位计满十就向高位进一,即“逢十进一”。

八进制

八进制计数制由0、1、2、3、4、5、6、7共8个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满八位就像高位进一,即“逢八进一”。

二进制

二进制计数制由0和1共两个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满二就向高位进一,即“逢二进一”。

其他进制

​ 在日常生活和工作中还会使用其他进制数。如:十二进制数、十六进制数、百进制数和千进制数等。无论哪种进制数,表示的方法都是类似的。如:十六进制数由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F共16个符号组成,“逢十六进一”。不同的是,用A、B、C、D、E和F分别表示10、11、12、13、14和15六个数字符号。

基数与权

​ 某进制计数制允许选用的基本数字符号的个数称为计数。一般而言,J进制数的计数为J,可供选用的基本数字符号有J个,分别是0到J-1,每个数位计满J就向高位进一,即“逢J进一”。

​ 某进制计数制中各位数字符号所表示的数值表示该数字符号值乘以一个与数字符号所处位置有关的常数,该常数称为“位权”(简称“权”)。位权的大小是以计数为底、数字符号所处的位置的序号为指数的整数次幂。

​ 十进制数允许使用是个基本数字符号,所以基数为10,每位数字符号代表的位数的大小是以10为底,数字符号所处位置的序号为指数的整数次幂。

​ 十进制的百位、十位、个位和十分位的权分别为102,101,100,10-1。故(555.5)10 可表示成(555.5)10=5 * 10^2+5 * 10^1+5 * 10^0+5 * 10-1。J进制数相邻两位数相差J倍,若小数点向左移n位,则整个数值就缩小Jn。反之,小数点向右移n位,数值就放大J^n。

数制之间的转换

​ 计算机内部使用的数字符号只有“0”和“1”两个。也就是说,计算机内部使用的是二进制数,所有的数值数据和非数值数据,都是由“0”和“1”这两个数字符号加以组合而成的,我们称之为“二进制代码”。

​ 计算机只用二进制的两个数码“0”和“1”来实现算数和逻辑运算,而人们仍然用十进制的形式向计算机中输入原始数据,并让计算机也用十进制形式显示和打印运算结果。所以,必须有一种自动转换方法,即让数据输入计算机后,将十进制转换成对应的二进制数,并在处理完毕后,再自动将二进制结果转换位十进制数。

​ 为了表达方便起见,常在数字后加一缩写字母后缀作为不同进制的标识。各种进制数的后缀字母分别为:

​ B:二进制数 O:八进制数

​ D:十进制数 H:十六进制数

​ 对于十进制数,通常不加后缀,也即十进制数后的字母D可省略。

十进制转二进制

​ 整数转二进制整数转二进制是最常见的。核心在于除2取余,倒序排列,高位补零。 不断地将数字除以2,将余数写一边,直到商为0时停止。下方的为二进制的高位,由高位到低位倒序排列余数,高位不够用0来代替。

负整数转二进制

​ 先是将对应的正整数转换成二进制后,对二进制取反然后再加1。以-10为例。10的二进制表达是(00001010)B,由于高位都是0,所以可以省略,写成(1010)B ,(用B来表示表达的是二进制)。

  1. 先取反。取反的意思就是1变成0,0变成1。(00001010)B=>(11110101)B

  2. 加上1。由于是二进制,所以我们逢二进一。(11110101)B =>(11110110)B。由于小数的高位都是1,所以我们也可以将高位省去,只保留(0110)B。不过注意和正整数进行区别。

小数转二进制

将小数部分乘以2,取整数(这个整数不是0就是1),当乘以二后小数部分结果为0或者位数够了,这些整数就是二进制。

以0.125为例

0.125 * 2 =0.25 整数部分为 0

0.25 * 2 = 0.5 整数部分为 0

0.5 * 2 = 1.0 整数部分为1,小数部分为0,停止。

二进制就为0.001

如果是带整数部分的小数进行进制转换,那么分开来处理,先将整数部分,转换成二进制,再将小数部分,转为二进制。

注意 小数进行二进制转换是存在无法除尽的情况的,这是正常的。根据题意保留足够的位数即可。

二进制转十进制

使用按权相加法。

高位为0

首先第一步将位数补齐,如果高位是0则是一个正数。将其分离位数,将分离出来的位数按从低位到高位的顺序,依次和2的冥相乘累加。以(1010)B为例。

分离位数: 1 0 1 0 => 相乘累加

\[0\times2^0+1\times2^1+0\times2^2+1\times2^3=10
\]

高位为1

如果高位为1,则说明是一个负数,那就先减1,再进行取反,在进行转换。以(11110110)B为例:

减一:(11110101)B => 取反: (00001010)B=>按权相加:

\[0\times 2^0+1\times2^1+0\times2^2+1\times2^3=10
\]

小数形式

整数部分和小数部分分开计算。整数部分参考上面。小数部分则是相反。以(0.001)B为例。按权相加:

\[0\times2^{-1}+0\times2^{-2}+1\times2^{-3}=0.125
\]

其他进制转换

整体上的方法和十进制与二进制的转换方法类似。转换成x进制的话使用除x取余,倒序排列,高位补零。二进制转换成其他进制还是采用按权相加的方法。

八进制与十六进制

八进制是逢八进一。十进制转八进制的话,过程就是不断地将数字除以8,将余数写一边,直到商为0时停止。下方的为二进制的高位,由高位到低位倒序排列余数,高位不够用0来代替。以十进制10转换为八进制例。

十六进制也是类似,需要注意的点是,十六进制的10 ~ 15是使用A ~ F来表示的。

NOIP初赛篇——06数制转换的更多相关文章

  1. NOIP初赛篇——05计算机语言

    程序 ​ 程序就是一系列的操作步骤,计算机程序就是由人实现规定的计算机完成某项工作的操作步骤.每一步骤的具体内容能够理解的指令来描述,这些指令告诉计算机"做什么"和"怎么 ...

  2. NOIP初赛篇——09原码、反码和补码

    一.数的原码.补码和反码表示 机器数和真值 ​ 在计算机中,表示数值的数字符号只有0和1两个数码,我们规定最高位为符号位,并用0表示正符号,用1表示负符号.这样,机器中的数值和符号全"数码化 ...

  3. NOIP初赛篇——07信息编码表示

    一.基本概念 编码 ​ 计算机要处理的数据除了数值数据以外,还有各类符号.图形.图像和声音等非数值数据.而计算机只能识别两个数字0,1.要使计算机能处理这些信息,首先必须要将各类信息转换成0与1表示的 ...

  4. NOIP初赛篇——04计算机软件系统

    计算机软件是指计算机系统中的程序及其文档,也是用户与硬件之间的接口,用户主要通过软件与计算机进行交流,软件是计算机的灵魂.没有安装软件的计算机称为"裸机",无法完成任何工作.一般软 ...

  5. NOIP初赛篇——10计算机网络

    网络的定义 ​ 所谓计算机网络,就是利用通信线路和设备,把分布在不同地理位置上的多台计算机连接起来. ​ 计算机网络是现代通信技术与计算机奇数结合的产物. ​ 网络中计算机与计算机之间的通信依靠协议进 ...

  6. NOIP初赛篇——08计算机安全知识

    引言 ​ 计算机安全中最重要的是存储数据的安全,其面临的主要威胁包括:计算机病毒.非法访问.计算机电磁辐射.硬件损坏等. ​ 计算机病毒是附在计算机软件中的隐蔽小程序,它和计算机其他工作程序一样,但会 ...

  7. NOIP初赛篇——03中央处理器CPU

    CPU ​ CPU(中央处理单元)是微机的核心部件,是决定微机性能的关键部件.20世纪70年代微型机的CPU问世,微型计算机的核心部件微处理器从Intel 4004,80286,80386,80486 ...

  8. NOIP初赛篇——02计算机系统的基本结构

    引言 计算机系统由硬件和软件两部分组成,硬件系统是计算机的"躯干",是物质基础.而软件系统则是建立在这个"躯干"上的"灵魂". 计算机硬件 ...

  9. NOIP初赛篇——01计算机常识

    发展历史 年代划分 代别 年代 逻辑(电子)元件 第一代 1946-1958 电子管 第二代 1959-1964 晶体管 第三代 1965-1970 集成电路 第四代 1971-至今 大规模.超大规模 ...

随机推荐

  1. Echarts的食用方式

    写在前面: 最近项目中用到了Echarts做趋势图,博主通过万能的度娘研究了一下.Echarts字段的使用基本都写在代码注释里了,这是博主的第一篇博客,如果哪里写的不好望大家见谅,最后希望本篇博客对大 ...

  2. .NET Core集成Seq+Serilog实现日志中心

    .NET Core集成Seq+Serilog实现日志中心 一,下载安装Seq https://datalust.co/download/all,版本很多,大家随便挑,开发版个人免费,商业版多账号需要收 ...

  3. ORACLE PRAGMA AUTONOMOUS_TRANSACTION 自治事务 单独提交某一段操作

    个人使用示例: CREATE OR REPLACE PROCEDURE logs(p_remark VARCHAR2, p_log CLOB) AS PRAGMA AUTONOMOUS_TRANSAC ...

  4. 彻底搞懂js __proto__ prototype constructor

    在开始之前,必须要知道的是:对象具有__proto__.constructor(函数也是对象固也具有以上)属性,而函数独有prototype 在博客园看到一张图分析到位很彻底,这里共享: 刚开始看这图 ...

  5. es6交换两个值

    let a='a',b='b' let [a,b]=[b,a];//借助数组解构 let {a:b,b:a}={a,b}//利用别名进行对象解构

  6. mysql创建表分区

    MySQL创建表分区 create table erp_bill_index( id int primary key auto_increment, addtime datetime ); inser ...

  7. MySQL03-多表&事务

    1.多表查询 1.1 笛卡尔积 有两个集合A,B .取这两个集合的所有组成情况. 要完成多表查询,需要消除无用的数据 1.2 多表查询分类 1.2.1 内连接查询: 1.隐式内连接:使用where条件 ...

  8. Java IO流字符流简介及基本使用

    Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...

  9. Hbase备份以及清表脚本

    脚本主要是方便自己工作使用,服务器环境中配置了hbase相关环境变量 1.hbase备份脚本 #!/bin/bash tableList=("table1" "table ...

  10. Promise 之初探

    陈旧的知识应该更新一下了,先尝试一下 Promise ,主要参考 https://www.cnblogs.com/whybxy/p/7645578.html 定义一个函数 直接上干货,定义一个函数: ...