进位计数制的基本概念

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

十进制

十进制计数制由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. 3、pytorch实现最基础的MLP网络

    %matplotlib inline import numpy as np import torch from torch import nn import matplotlib.pyplot as ...

  2. 一个小时学会用 Go 编写命令行工具

    前言 最近因为项目需要写了一段时间的 Go ,相对于 Java 来说语法简单同时又有着一些 Python 之类的语法糖,让人大呼"真香". 但现阶段相对来说还是 Python 写的 ...

  3. Mybatis学习-日志与分页

    日志 为什么需要日志 如果一个数据库操作出现了异常,需要排错,那么日志就是最好的助手 Mybatis通过使用内置的日志工厂提供日志功能,有一下几种实现方式: SLF4J Apache Commons ...

  4. 04-flask-模版基础

    Jinja2 概念 Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,其是Fl ...

  5. 洛谷题解 P1051 【谁拿了最多奖学金】

    其实很水 链接: P1051 [谁拿了最多奖学金] 注意: 看好信息,不要看漏或看错因为信息很密集 AC代码: 1 #include<bits/stdc++.h>//头文件 2 using ...

  6. 蒲公英 · JELLY技术周刊 Vol.35: Flash 四宗罪?

    蒲公英 · JELLY技术周刊 Vol.35 Flash 曾是 Web 迈向新世代的福音书,它为这个世界带来了缤纷色彩,但也如伊甸园的苹果,闪耀着智慧的光芒,却四灾随行.诞生 1995 年至今 25 ...

  7. Python Cvxopt安装及LP求解

    Python 2.7 Pycharm 1.直接File>Settings>Project>InterPreter ,点击右侧'+' 弹出Available packages窗口,搜索 ...

  8. python 实现数值积分与画图

    import numpy as np from scipy import integrate def half_circle(x): return (1 - x ** 2) ** 0.5 N = 10 ...

  9. Python之word文档替换字符串(也可以用于短模板套用)

    Python之word文档替换字符串(也可以用于短模板套用),代码如下: 1 ''' 2 #word模板套用1:创建模板,适合比较短的文档 3 ''' 4 5 #导入所需库 6 from docx i ...

  10. Entity Framework 更新失败,调试后发现是AsNoTracking的原因

    public override int SaveChanges() { var changedEntities = ChangeTracker.Entries().Where(e => e.St ...