进制和进制转换

news2024/11/25 7:42:30

什么是进制

进制的全称是进位计数制,是人为定义的带进位的计数方法,对于任何一种X进制,就表示每一位置上的数运算时都是逢 X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,X进制就是逢X进位。

常用的进制

二进制(数码:0,1)
八进制(数码:0,1,2,3,4,5,6,7)
十进制(数码:0,1,2,3,4,5,6,7,8,9,)
十六进制(数码:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

进制的前缀、后缀

为了区分数字的进制,常常在数字的后面加上英文字母作为后缀或者在数字的前面加上前缀

进制数码范围前缀后缀
二进制0~10b(0B)B
八进制0~70Q
十进制0~9无()D
十六进制0~9,A-F0XH

比如:11101B(二进制) 123Q(八进制) 567D(十进制) C7AH(十六进制)
也可以用加括号下标表示法:如(11101)2

进制转化

1.十进制

十进制共有10个数码{0,1,2,3,4,5,6,7,8,9},它的特点是逢 10进1。

二进制转十进制:按权展开后相加,下面是几个示例

img

 

 

十进制转二进制:方法:整数部分除基(2)取余,倒序排列;小数部分乘基(2)取整, 正序排列。

例题:将十进制数 28 转换为二进制数

img

 

 例题:将十进制数 16.6875 转换为二进制数

img

 

2.八进制

八进制共有8个数码{0,1,2,3,4,5,6,7},它的特点是逢 8进1。

八进制转十进制: 按权展开后相加,下面是几个示例

img

十进制转八进制方法: 整数部分除基(8)取余,倒序排列;小数部分乘基(8)取整, 正序排列。

img

 

 

八进制与二进制转换方法: 三分法(想一想为什么可以用这种方法)
由于2^3=8,八进制与二进制有一种对应的关系,如下图:

八进制01234567
二进制000001010011100101110111

img

例题1: 请你编写一个程序,将八进制数转换成十进制数。

解题思路: 首先利用数位分离分离出每一位数字,然后i从1开始累乘,每次乘8即可。完整的代码如下,除此之外,你还能想到几种其它的代码吗?

#include<bits/stdc++.h>
using namespace std; 
int fun(int x)
{
    int i=1,sum=0;
    while(x!=0)
    {
        sum=sum+(x%10)*i;
        x=x/10;
        i=i*8;
    }
    return sum;
}
int main() 
{
    int x;
    cin>>x;
    cout<<fun(x)<<endl;
}

 

 

例题2: 请你编写一个程序,将十进制数转换成八进制数。

解题思路: 首先利用将x对8取余,每次模的结果放在一个数组里面,同时x每次更新为x/8,最后只要逆序输出数组里面的数字就可以了。完整的代码如下,除此之外,你还能想到几种其它的代码?

#include<bits/stdc++.h>
using namespace std; 
int main() 
{
    int n=0,x,a[100];
    cin>>x;
    while(x!=0)
    {
        n++;
        a[n]=x%8;
        x=x/8;
    }
    for(int i=n;i>=1;i--) 
        cout<<a[i];
    return 0;

}

 

3.十六进制

十六进制共有16个数码{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F},它的特点是逢 16进1。

十六进制转十进制: 按权展开后相加,下面是几个示例

img

十六进制与二进制转换: 方法:四分法(想一想为什么可以用这种方法)

img

相信通过上面的介绍,同学们已经对什么是二进制、八进制、十进制以及十六进制已经了如指掌了吧。那么接下来再让我们如何利用C++进行进制之间的转换吧。

例题3:输入一个b进制的数字a,将其转换成对应的十进制数字(在int范围内)。

样例输入: 共一行,为两个数字,第一个为数字a,第二个为进制b;

样例输出: 为一个数字,表示对应的十进制数字

样例输入1:

101 2

样例输出1:

5

 解题思路: 将数字存在字符串里,从后往前遍历整个字符串,因为可能是16进制会有ABCDEF,因此需要对a[i]进行判断,如果是a[i]>='A'则t=a[i]-65+10,否则t=a[i]-48。然后将t乘上b的k次方就可以了,k从0开始每次加1。

#include<bits/stdc++.h>
using namespace std;
int main( )
{
    string a;        //将数字存在字符串里
    int b,i,s=0,k=1,t;
    cin>>a>>b;       //输入这个数和进制
    for(i=a.size()-1;i>=0;i--)  //从后往前
    {//选择运算符
        t=(a[i]>='A'?a[i]-65+10:a[i]-48); //因为可能是16进制会有ABCDEF,因此需要对a[i]进行判断,如果是a[i]>='A'则t=a[i]-65+10,否则t=a[i]-48。
         s=s+t*k;
         k=k*b;
    }
    cout<<s; 
}   

 

例题4: 输入一个十进制的数字a,将其转换成对应的b进制数字(在int范围内)。

样例输入: 共一行,为两个数字,第一个为数字a,第二个为进制b;

样例输出: 为一个数字,表示对应的十进制数字

样例输入1:

101 8

样例输出1:

145

解题思路: 还是利用字符串帮助实现。首先求a%b的余数,将余数加48转换成字符型,考虑到16进制,如果大于’9’要转换成字母ABCDEF,然后利用字符串的拼接和翻转实现将一个十进制的数字a,转换成对应的b进制数字。

#include<bits/stdc++.h>
using namespace std;
int main( )
{
    int a,b;
    string c;  //c是字符串
    cin>>a>>b;
    if(a==0){
        cout << 0;
        return 0;
    }
    while(a!=0)
    {
        char t=a%b+48;  //t是字符型,把数字存进字符串里加48
        if(t>'9') //这里是字符’9’,考虑16进制
        {
            t=64+t-'9';  //如果超过9,转换成字母ABCDEF
        } 
        c=c+t; //字符串拼接
        a=a/b; //更新a的值
    }
    reverse(c.begin(),c.end()); //逆序输出即可
    cout<<c;
}   

 

例题5: 输入一个b进制的数字a,将其转换成对应的c进制数字(十进制数字在int范围内)。

样例输入:共一行,为三个数字,第一个为数字a,第二个为当前进制b,第三个为待转化进制c

样例输出:为一个数字,表示对应的c进制数字

样例输入1:

101 10 8

样例输出1:

145

解题思路: 先转成十进制,再从十进制转为其他进制。本题是进制转换章节最重要的一题,因为只要会了这一题,可以解决任何进制之间的转换问题,因此希望同学一定要熟练掌握。

#include<bits/stdc++.h>
using namespace std;
int _zhuan10(string a,int b)
{
    int s=0,k=1,t,len=a.size();
    for(int i=len-1;i>=0;i--)
    {
        t=(a[i]>='A'?a[i]-65+10:a[i]-48);
        s=s+t*k;
        k=k*b;
    }
    return s;
}
string _10zhuan(int a,int b)
{
    string c;
    while(a!=0)
    {
        char t=a%b+48;
        if(t>'9')
        {
            t=64+t-'9'; 
        } 
        c=c+t;
        a=a/b;
    }
    reverse(c.begin(),c.end());
    return c;   
} 
int main()
{
    string a;
    int b,c;
    cin>>a>>b>>c;
    if(a=="0")
    {
        cout<<0;
        return 0;
    }
    int t=_zhuan10(a,b);
    cout<<_10zhuan(t,c); 
}   


拓展进制转换题目(大海捞针)

P1041 正整数N转换成一个二进制 

P2329 十进制转十六进制 

P2352 十进制转二进制 II  

P2352 十进制转二进制 II 

P2463 进制转换 III (任意转任意) 

P2465 贝贝的保险库密码(key) 

P2466 贝贝的数学课(change) 

P2467 任意进制的整数转换成十进制数 

P3632 合成游戏 

如要题解播放量到100,就发

 

结尾 

这篇文章就结束了,如有疑问请私信我,下期再见拜拜~

 ☆             轉WAN發

 

 

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

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

相关文章

数据出境要依法“过安检”!什么是数据出境?

为了规范数据出境活动&#xff0c;保护个人信息权益&#xff0c;维护国家安全和社会公共利益&#xff0c;促进数据跨境安全、自由流动。从2022年9月1日起&#xff0c;《数据出境安全评估办法》施行。什么是数据出境&#xff0c;什么情况下需要进行数据出境安全评估呢&#xff1…

windows下安装composer

安装Php 教程 下载composer 官网 中文网站 exe下载地址 下载好exe 双击运行 找到php.ini注释一行代码 测试 composer -v说明安装成功 修改源 执行以下命令即可修改 composer config -g repo.packagist composer https://packagist.phpcomposer.com # 查看配置…

基于springboot+mybatis +mysql+jsp图书管理系统

基于springbootmybatis mysqljsp图书管理系统 一、系统介绍二、功能展示1.用户登陆2.用户注册3.图书借阅(学生)4.我的借阅&#xff08;学生&#xff09;5.图书管理&#xff08;管理员&#xff09;6.用户管理&#xff08;管理员&#xff09;7.借阅信息&#xff08;管理员&#x…

VScode中python的相对路径与绝对路径 FileNotFoundError: [Errno 2] No such file or directory

VScode中&#xff0c;python里的相对路径是相对于当前工作目录来定位的&#xff0c;而当前的工作目录在VScode中下方的终端窗口会有提示&#xff1a; 说明此时的工作目录并非当前python文件所在的目录&#xff0c;而是C:\Users\xxxxx(你的用户名)。因此&#xff0c;使用VScode…

【Apollo学习笔记】—— Cyber RT之创建组件

文章目录 前言0. 前置知识0.1 什么是 Component0.2 Component 的类型0.3 Component 的创建及工作流程0.4 Component 如何被加载0.5 Component 的优点 1. 初始化组件的目录结构2. 实现组件类2.1 头文件2.2 源文件2.3 创建 BUILD 文件 3. 设置配置文件3.1 配置 DAG 文件3.2 配置 …

每克卖1.67亿美元——内嵌富勒烯

英国牛津大学的科学家宣称&#xff0c;一个叫做Designer Carbon Materials的实验室正在生产内嵌富勒烯&#xff0c;而且还以3.2万美元的天价出售了200微克。 内嵌富勒烯于1985年被首次发现&#xff0c;它是由碳原子组成的球形结构。因其形状而被昵称为“巴基球”。60个碳原子组…

Java8实战-总结7

Java8实战-总结7 通过行为参数化传递代码真实的例子用Runnable执行代码块GUI事件处理 小结 Lambda表达式Lambda管中窥豹 通过行为参数化传递代码 真实的例子 用Runnable执行代码块 线程就像是轻量级的进程&#xff1a;它们自己执行一个代码块。但是&#xff0c;怎么才能告诉…

QT实现连接MySQL数据库以及查询等操作

QT实现连接数据库以及查询等操作 目录 QT实现连接数据库以及查询等操作实现效果建立数据库代码实现文件结构连接数据库增删改查 所用类及其函数解释源代码后面的话 实现效果 功能包含数据库的增删改查和界面的显示&#xff0c;因为没有用.ui文件所以控件的位置都是手动设置的&a…

【AI应用如何决策?如何研发出安全可信的AI应用?《Python可解释AI(XAI)实战》告诉你】

怎样才能有效地向A业务和利益相关者解释Al的决策?你需要仔细规划、设计和可视化。要解决的问题、模型以及变量之间的关系通常是微妙、出乎意料和复杂的。 《Python可解释AI&#xff08;XAI&#xff09;实战》通过几个精心设计的项目让你在实践中掌握众多XAI工具和方法&#x…

无涯教程-jQuery - triggerHandler( event, data )方法函数

triggerHandler(event&#xff0c;[data])方法触发元素(用于特定事件类型)上所有绑定的事件处理程序&#xff0c;而无需执行浏览器的默认操作&#xff0c;冒泡或实时事件。 triggerHandler( event, [data] ) - 语法 selector.triggerHandler( event, [data] ) 这是此方法使用…

【Matlab】基于粒子群优化算法优化BP神经网络的数据回归预测(Excel可直接替换数据)

【Matlab】基于粒子群优化算法优化 BP 神经网络的数据回归预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码5.1 fun.m5.2 main.m 6.完整代码6.1 fun.m6.2 main.m 7.运行结果 1.模型原理 基于粒子群优化算法&#xff08;…

2、基于redis实现分布式锁

目录 2.1. 基本实现2.2. 防死锁2.3. 防误删2.4. redis中的lua脚本2.4.1 redis 并不能保证2.4.2 lua介绍 2.5. 使用lua保证删除原子性 2.1. 基本实现 借助于redis中的命令setnx(key, value)&#xff0c;key不存在就新增&#xff0c;存在就什么都不做。同时有多个客户端发送setn…

PhonewindowManager 使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Android 按键修改二、PhoneWindowManager 简介三、如何打开 或者 关闭 Navigation Bar四、如何长按Home 键启动Google Now五、如何长按实体Menu键进…

B. Vika and the Bridge

Example input 5 5 2 1 1 2 1 1 7 3 1 2 3 3 3 2 1 6 6 1 2 3 4 5 6 8 4 1 2 3 4 2 3 1 4 3 1 1 1 1 output 0 1 2 2 0 解析&#xff1a; 题意为每次只能踩相同颜色的木板&#xff0c;同时他有一次改变一块木板颜色的机会&#xff0c;问每种颜色的最大跨的步子长度中的最小…

Linux复习——基础知识

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 1. 有关早期linux系统中 sysvin的init的7个级别描述正确的是( )[选择1项] A. init 1 关机状态 B. init 2 字符界面多用户模式 …

科技云报道:大模型的火烧到了AI服务器上

科技云报道原创。 大模型的纷争已经随着各大入局者公布产品后&#xff0c;热度逐渐退去&#xff0c;但是由大模型带来的产业链高频共振&#xff0c;已经传递了算力层。 表现最为激烈的&#xff0c;就是AI服务器市场。大模型带来的算力需求&#xff0c;直接引发了一波AI服务器…

算法(4)

字符串 给定一个数值的数组&#xff0c;要求组合最小的数值。 public String PrintMinNumber(Integer [] s) {if(snull) return null;String s1"";ArrayList<Integer> listnew ArrayList<Integer>(Arrays.asList(s)); // for(int i0;i<s.leng…

二维数组练习题-回形数

从键盘输入一个整数&#xff08;1~20&#xff09;&#xff0c;则以该数字为矩阵&#xff0c;将数字按照顺时针螺旋填入其中 package array;import java.util.Scanner;/*** author 苗晓强* date 2023/7/26 23:56* 回形数&#xff1a;* 从键盘输入一个整数&#xff08;1~20&…

从9G到0.3G,腾讯会议对他们的git库做了什么?

&#x1f449;导读 过去三年在线会议需求井喷&#xff0c;腾讯会议用户量骤增到3亿。快速迭代的背后&#xff0c;腾讯会议团队发现&#xff1a;业务保留了长达5年的历史数据&#xff0c;大量未进行 lfs 转换&#xff0c;新 clone 仓库本地空间占17.7G。本地磁盘面临严重告急&am…

FastSAM 论文解读

论文名称&#xff1a;Fast Segment Anything 论文地址&#xff1a;http://export.arxiv.org/pdf/2306.12156 代码地址&#xff1a;GitHub - CASIA-IVA-Lab/FastSAM: Fast Segment Anything 1. 关键内容 基于YOLOv8-seg实现了FastSAM&#xff0c;它比SAM快50倍&#xff0c;且…