CSP-J基础之进制转换

news2025/1/9 16:07:04

文章目录

  • 前言
  • 数制
    • 1. **二进制 (Binary)**
    • 2. **八进制 (Octal)**
    • 3. **十进制 (Decimal)**
    • 4. **十六进制 (Hexadecimal)**
  • K进制转十进制
      • 例子 1:以二进制(K = 2)为基数
      • 例子 2:以八进制(K = 8)为基数
      • 例子 3:以十六进制(K = 16)为基数
  • 十进制转K进制
    • 整数部分
        • 详细图示
    • 小数部分
      • 十进制小数转K进制
  • 总结


在编程和计算机科学中,进制转换是一个基础而重要的概念。进制系统用于表示数值的不同方式,每种进制都有其特定的应用场景。对于编程竞赛中的问题,理解并掌握进制转换可以帮助我们解决许多复杂的计算和算法问题。本文将介绍进制转换的基础知识,包括常见的进制系统及其转换方法,为备战CSP-J(Certified Software Professional Junior)等信息学竞赛提供必要的理论基础。

前言

在计算机科学中,数字可以以不同的进制系统表示。最常见的进制系统包括二进制(base-2)、八进制(base-8)、十进制(base-10)和十六进制(base-16)。每种进制系统都有其独特的符号和表示方式:

  • 二进制:使用0和1两个符号。
  • 八进制:使用0至7的数字。
  • 十进制:使用0至9的数字,是我们日常生活中最常用的进制。
  • 十六进制:使用0至9和A至F(其中A=10, B=11, …, F=15)的数字和字母。

在信息学竞赛中,我们常常需要在这些进制之间进行转换。掌握这些基本的转换技巧不仅能帮助我们解决竞赛题目,还能提高我们对数字表示和存储的理解。


数制

在计算机科学中,理解不同的数制及其规则是基础而重要的知识。数制系统用于表示数字的不同方式,每种系统都有其特定的应用场景和计算规则。本文将介绍计算机中常用的几种数制及其规则,包括二进制、八进制、十进制和十六进制。

1. 二进制 (Binary)

基础:二进制是以2为底的数字系统,仅使用两个符号:0 和 1。

规则

  • 位 (Bit):二进制数的基本单位是位(bit),每一位可以是0或1。
  • 表示方法:二进制数表示的是一个由0和1组成的序列,用于计算机内部的数据表示和处理。

应用:所有计算机内部的运算和数据存储都使用二进制格式,因为计算机的基本操作单元是开关(0和1)。

2. 八进制 (Octal)

基础:八进制是以8为底的数字系统,使用的符号是0至7。

规则

  • 位 (Octet):八进制数的基本单位是位,每一位可以是0到7之间的数字。
  • 表示方法:八进制数是由0到7的数字组成的序列。它通常用于简化大二进制数的表示。

应用:八进制在计算机编程中有时用于简化二进制数据的表示,但现代计算机系统中使用的较少。

3. 十进制 (Decimal)

基础:十进制是以10为底的数字系统,使用的符号是0至9。

规则

  • 位 (Digit):十进制数的基本单位是位,每一位可以是0到9之间的数字。
  • 表示方法:十进制数是由0到9的数字组成的序列,是我们日常生活中最常用的数制。

应用:十进制是最常用的数制,我们在日常生活中的所有数学计算和记录基本上都使用十进制。

4. 十六进制 (Hexadecimal)

基础:十六进制是以16为底的数字系统,使用的符号是0至9和A至F(其中A=10, B=11, …, F=15)。

规则

  • 位 (Hex Digit):十六进制数的基本单位是位,每一位可以是0到9或A到F之间的符号。
  • 表示方法:十六进制数是由0到9和A到F的字符组成的序列,用于简化二进制数据的表示。

应用:十六进制广泛用于计算机编程,尤其是在表示内存地址和颜色编码时。它比二进制更紧凑,易于阅读和处理。

不同的数制系统在计算机科学中具有不同的用途和应用场景。二进制是计算机内部使用的基本数制,八进制在某些情况下用于简化二进制数据的表示,十进制是我们日常生活中最常用的数制,而十六进制则用于简化大规模二进制数据的表示。理解这些数制及其规则,可以帮助我们更好地进行数据处理、编程和计算。希望通过本文的介绍,你能对计算机中的数制有更深入的了解,并能够在实际应用中灵活运用这些知识。

K进制转十进制

对于K进制转换十进制,我们使用的方法为按权相加法展开成一个多项式
公式:abcd.efg(K) = d * K^0 + c * K^1 + b * K^2 + a * K^3 + e*K^-1 + f*K^-2 + g*K^-3

公式 abcd.efg(K) = d * K^0 + c * K^1 + b * K^2 + a * K^3 + e*K^-1 + f*K^-2 + g*K^-3 表示了一个以 K 为基数的数的表示方法,其中 abcd 是整数部分,efg 是小数部分。通过这个公式,我们可以将一个基于 K 的数转换为十进制数。下面是几个具体的例子:

例子 1:以二进制(K = 2)为基数

假设我们有一个二进制数 1101.101,我们希望将其转换为十进制数。

  1. 整数部分 1101
    在这里插入图片描述

  2. 小数部分 .101
    在这里插入图片描述

  3. 总和
    在这里插入图片描述

所以,1101.101(二进制)等于 13.625(十进制)。

例子 2:以八进制(K = 8)为基数

假设我们有一个八进制数 547.64,我们希望将其转换为十进制数。

  1. 整数部分 547
    在这里插入图片描述

  2. 小数部分 .64
    在这里插入图片描述

  3. 总和
    在这里插入图片描述

所以,547.64(八进制)等于 359.8125(十进制)。

例子 3:以十六进制(K = 16)为基数

假设我们有一个十六进制数 1A3.4B,我们希望将其转换为十进制数。

  1. 整数部分 1A3
    在这里插入图片描述

  2. 小数部分 .4B
    在这里插入图片描述

  3. 总和
    在这里插入图片描述

所以,1A3.4B(十六进制)等于 419.29296875(十进制)。

通过这些例子,我们可以看到如何将不同进制的数值转换为十进制,从而更好地理解和处理各种数字表示方式。

十进制转K进制

整数部分

十进制整数部分转K进制使用的是倒除法:
当然,我们可以详细地说明如何将一个十进制整数转换为二进制(K = 2)使用倒除法。这里以十进制数 25 为例进行说明。

十进制数 25 转换为二进制

步骤

  1. 步骤1:将 25 除以 2,记录商和余数。
  2. 步骤2:将商继续除以 2,记录新的商和余数。
  3. 步骤3:重复上述步骤直到商为零。
  4. 步骤4:余数的倒序就是目标二进制数。
详细图示
  1. 初始值:25

    • 除数(基数)2
    • 商 = 25 ÷ 2 = 12
    • 余数 = 25 % 2 = 1

    图示

        25
    ------
     2 | 25
        ----
         12 余数 1
    
  2. 更新值:商 12

    • 除数(基数)2
    • 商 = 12 ÷ 2 = 6
    • 余数 = 12 % 2 = 0

    图示

         12
    ------
     2 | 12
        ----
         6  余数 0
    
  3. 更新值:商 6

    • 除数(基数)2
    • 商 = 6 ÷ 2 = 3
    • 余数 = 6 % 2 = 0

    图示

          6
    ------
     2 | 6
        ----
         3  余数 0
    
  4. 更新值:商 3

    • 除数(基数)2
    • 商 = 3 ÷ 2 = 1
    • 余数 = 3 % 2 = 1

    图示

          3
    ------
     2 | 3
        ----
         1  余数 1
    
  5. 更新值:商 1

    • 除数(基数)2
    • 商 = 1 ÷ 2 = 0
    • 余数 = 1 % 2 = 1

    图示

          1
    ------
     2 | 1
        ----
         0  余数 1
    
  6. 结果:将余数从最后到第一个排列,得到二进制数 11001

    完整图示

        25
    ------
     2 | 25
        ----
         12 余数 1
    
         12
    ------
     2 | 12
        ----
         6  余数 0
    
          6
    ------
     2 | 6
        ----
         3  余数 0
    
          3
    ------
     2 | 3
        ----
         1  余数 1
    
          1
    ------
     2 | 1
        ----
         0  余数 1
    

    结果:11001(二进制)

小数部分

十进制小数转K进制方法是取整法,即是小数部分循环乘以K直到0:

十进制小数转K进制

方法:将十进制小数转换为K进制的过程称为取整法(Multiplying by Base)。该方法通过将小数部分不断乘以基数 K,并记录每次乘积的整数部分,直到小数部分为零或者达到足够的精度为止。

例子 1:将十进制小数 0.625 转换为二进制(K = 2)
图示

    0.625 × 2 = 1.25  -> 整数部分 1, 小数部分 0.25
    0.25 × 2 = 0.5    -> 整数部分 0, 小数部分 0.5
    0.5 × 2 = 1.0     -> 整数部分 1, 小数部分 0.0

结果:0.625(十进制)等于 0.101(二进制)。

例子 2:将十进制小数 0.7 转换为八进制(K = 8)

  1. 结果:将记录的整数部分从上到下排列得到八进制小数部分 0.5463(注意,这里小数部分进入了循环)。

    图示

        0.7 × 8 = 5.6   -> 整数部分 5, 小数部分 0.6
        0.6 × 8 = 4.8   -> 整数部分 4, 小数部分 0.8
        0.8 × 8 = 6.4   -> 整数部分 6, 小数部分 0.4
        0.4 × 8 = 3.2   -> 整数部分 3, 小数部分 0.2
        0.2 × 8 = 1.6   -> 整数部分 1, 小数部分 0.6 (开始循环)
    

    结果:0.7(十进制)等于 0.5463(八进制),其中小数部分 0.6 进入了循环。

简单来说就是先乘以对应的K进制,然后用得到的数的小数部分再次乘以K进制(当小数部分不为0时)。当小数部分为0直接得到结果


总结

进制转换是计算机科学和编程中的基本技能,尤其在编程竞赛中具有重要的应用。通过理解和掌握不同进制系统的表示方式,我们可以更加灵活地处理各种数字表示和转换问题。无论是在进行数据处理、算法设计,还是在解决实际问题时,掌握进制转换的知识都能显著提高我们的解决能力和效率。希望本文提供的基础知识能为你在CSP-J竞赛中的进制相关题目提供帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MATLAB源码-第160期】基于matlab的胡桃夹子优化算法(NOA)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境: MATLAB 2022a 1、算法描述 胡桃夹子优化算法(Nutcracker Optimization Algorithm, NOA)是一个灵感来源于胡桃夹子的故事的元启发式优化算法。这个故事中,胡桃夹子是一个能够将坚果壳轻易地破开以获取内部果仁的工具。…

滚珠花键助力生产加工精准化!

滚珠花键是一种机械传动元件,它通过花键轴与花键孔的配合,将动力从一个轴传递到另一个。在工业自动化领域内,滚珠花键系列产品主要用于辅助直线运动。尤其是在那些需要精密传动的应用场景,而滚珠花键在生产加工中的优势主要体现在…

Vulnhub:Dr4g0n b4ll 1

靶机下载地址 信息收集 主机发现 nmap扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip:192.168.31.183 端口扫描 nmap 192.168.31.183 -A -p- -T4 开放了22,80端口,端口详细信息如下: 网站信息收集 访问http服务。 …

WPF入门到跪下 第十一章 Prism(四)View与ViewModel的自动关联

View与ViewModel的自动关联 一、ViewModelLocator 在学习MvvmLight框架时,也使用了ViewModelLocator类。但在MvvmLight框架中,ViewModelLocator只是一个自定义类,与框架无关,目的就是初始化IOC容器。而在Prism框架中则不同&…

matplotlib中文乱码问题

在使用Matplotlib进行数据可视化的过程中,经常会遇到中文乱码的问题。显示乱码是由于编码问题导致的,而matplotlib 默认使用ASCII 编码,但是当使用pyplot时,是支持unicode编码的,只是默认字体是英文字体,导…

【LeetCode】08.字符串转换整数

题目要求 解题思路 本题没有难点,只需注意最大整数的比较时要切换成long long 代码实现 class Solution { public:int myAtoi(string s) {//标记正负号int flag1;long long ret0;int ns.size();int i0;//去除空格while(s[i] ) i;//识别符号if(s[i]-) flag-1;i…

vue项目打包后,生成的index.html直接本地打开后没内容

应该是文件路径找不到了 可以打开控制台看看 可以看到加载css,js,图标资源失败,所以是文件路径问题 vue-cli工程化生成的项目在打包后,默认的资源寻找路径是根,所以可以看到它直接在/F;/favicon找图标,但…

机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键,但它们仍未被广泛使用欢迎来到雲闪世界。 碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。 这是有充分理由的。 事实上,因果模型在商业中具有很高的价值,因为它们为“假设”情景提…

经典文献阅读之--WidthFormer(基于Transformer的BEV方案量产方案)

0. 简介 《WidthFormer: Toward Efficient Transformer-based BEV View Transformation》提出了WidthFormer,这是一种基于Transformer的新颖鸟瞰视角(Birds-Eye-View, BEV)三维检测方法,专为实时自动驾驶应用而设计。WidthFormer…

网络安全 day5 --- 反弹SHELL不回显带外正反向连接防火墙出入站文件下载

免责声明 本免责声明适用于作者所有文章内容。使用者需明确,网络安全技术仅供学习和合法研究使用,不得用于任何非法活动,如未经授权的入侵、攻击或数据窃取,所有相关法律责任由使用者自行承担。由于网络安全操作可能带来系统崩溃、…

程序中的零值比较

前言:什么是零值? 在C/C中,“零值”通常指的是数值类型的零(0),对于指针来说则是空指针(nullptr 或 NULL)。下面我们将分别讨论如何比较整型、字符、浮点数和指针与“零值”的比较。…

顺序表与链表练习

目录 1.在长度为n(n > 1)的单链表上,设有头和尾两个引用,执行( )操作与链表的长度有关。 2.下列关于链表的说法那个是正确的( ) 3. 关于链表和顺序表间的区别,叙述错误的是( ) 4.在长度为 n 的顺序表下标为 i…

oatpp apiclient 客户端get,post请求python fastapi demo

最新用fastapi搞了个服务端,python功能太强了,就是环境不好弄,弄好后,不要轻易换python版本,不要装多个python版本 前面搞了个oatpp webapi服务端,现在要用客户端,为什么用opatpp客户端,因为他不再带其他库了 demo: 我的请求比较简单,就是向python 的 fastapi服务端…

CSP-J基础之常见的竞赛题库

文章目录 CSP-J基础之常见的竞赛题库1. 可达 (KEDA)2. 洛谷 (Luogu)3. Codeforces 洛谷账号的注册总结 CSP-J基础之常见的竞赛题库 在备战CSP-J(Certified Software Professional Junior)及其他信息学竞赛时,选手们常需要借助在线题库来进行…

GIS圈大事件!Cesium被收购了,是好是坏?

大家好,我是日拱一卒的攻城师不浪,致力于技术与艺术的融合。这是2024年输出的第34/100篇文章。 Cesium开发交流群V:brown_7778(备注来意) 一觉醒来,突然看到Cesium官方发的消息,宣布通过收购的方…

第十三届山东省ICPC

vp链接&#xff1a;https://codeforces.com/gym/104417 A. Orders 根据题意模拟&#xff0c;分别按照 a&#xff0c;b 排序&#xff0c;排序后再判断该订单是否能完成。 #include <bits/stdc.h> using namespace std;#define int long longconst int N 105; int n, k…

C#索引器(Indexer)

索引器(Indexer)允许一个对象可以像数组一样使用下标的方式来访问. 当为类定义一个索引器时,该类的行为就会像一个虚拟数组(virtual array) 一样.可以使用数组访问运算符[]来访问该类的成员. 语法 一维索引器的语法如下: element-type this[int index] { // get 访问器 …

Minimax-秋招正式批-面经(SQL相关)

1. 谈谈对聚簇索引的理解 聚簇索引 InnoDB通过主键聚集数据&#xff0c;如果没有定义主键&#xff0c;InnoDB会选择非空的唯一索引代替。如果没有这样的索引&#xff0c;InnoDB会隐式定义一个主键来作为聚簇索引聚簇索引就是按照每张表的主键构造一颗B树&#xff0c;同时叶子…

中国书法——孙溟㠭浅析碑帖《越州石氏帖》

孙溟㠭浅析碑帖《越州石氏帖》 《越州石氏帖》 是一部汇集多本摹刻的帖&#xff0c;南宋时期的会稽石邦哲&#xff08;字熙明&#xff09;把家藏的一些法书碑帖集中一起摹刻成的&#xff0c;宋理宗时临安书商陈思《宝刻丛编》有记載这部帖的目录。现在还存有宋代时拓的残缺本…

golang hertz框架入门

两种模式新建项目 1、手动新建项目 2、使用hz工具新建项目 一、手动创建项目&#xff0c;并拉取框架 1、新建项目目录 hertz_demo_w 2、在项目跟目录新建main.go 文件 package mainimport ("context""github.com/cloudwego/hertz/pkg/app""github.…