C++算法进制间的转换

2023-11-02

进制间的转换

进制转换方法是什么?

进制转换的方法是:二进制数,十六进制数可以采用按权展开法转化为十进制数,十进制转化为R进制要分为两部分,其中整数部分要除R取余,直到商为0,小数部分要乘R取余直到得到整数。
在这里插入图片描述

进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。比如二进制是逢2进一位,十进制也就是我们常用的0-9是逢10进一位。接下来将在文章中为大家详细介绍,并在最后,利用C++编写16进制数转换为8进制数,16进制转换为10进制,10进制转换为2、8、16进制,附带代码,希望对大家有所帮助。

一、简述
进位计数制:是人们利用符号来计数的方法。一种进位计数制包含一组数码符号和两个基本因素。

  1. 数码:用不同的数字符号来表示一种数制的数值,这些数字符号称为“数码”。
  2. 基:数制所使用的数码个数称为”基”。
  3. 权:某数制每一位所具有的值称为”权”。

二:进制转换的理论

  1. 二进制数、十六进制数转换为十进制数

    用按权展开法把一个任意R进制数
    an an-1 …a1a0 . a-1 a-2…a-m
    转换成十进制数,其十进制数值为每一位数字与其位权之积的和。
    an×R n + an-1×R n-1 +…+ a1×R 1 + a0×R 0 + a-1 ×R-1+ a-2×R-2+ …+ a-m×R-m

  2. 十进制转化成R进制

    十进制数轮换成R进制数要分两个部分:
    整数部分:除R取余数,直到商为0,得到的余数即为二进数各位的数码,余数从右到左排列(反序排 列)。
    小数部分:乘R取整数,得到的整数即为二进数各位的数码,整数从左到右排列(顺序排列)。

  3. 十六进制转化成二进制

    每一位十六进制数对应二进制的四位,逐位展开。

  4. 二进制转化成十六进制

    将二进制数从小数点开始分别向左(对二进制整数)或向右(对二进制小数)每四位组成一组,不足四位补零。

另外增加一篇学习过程中,对我帮助很大的一篇文章: 二进制与8,10,16转换

三:十六进制转八进制代码

#include<iostream>
#include<string>
using namespace std;
int main()
{
	int i,j,k;
    int n;//存放输入几个十六进制数
    string s1;//存放输入的十六进制数
    string s2;//存放二进制数
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>s1;//依次输入十六进制数 例:39
        s2="";
        for(j=0;j<s1.length();j++)
        {
            switch (s1[j]) //依次转为2进制 例:39 s1[0]=3 s2=0011 ---- s1[1]=9 s2=0011+1001= 0011 1001
            {
                case '0':s2+="0000";break;
                case '1':s2+="0001";break;
                case '2':s2+="0010";break;
                case '3':s2+="0011";break;
                case '4':s2+="0100";break;
                case '5':s2+="0101";break;
                case '6':s2+="0110";break;
                case '7':s2+="0111";break;
                case '8':s2+="1000";break;
                case '9':s2+="1001";break;
                case 'A':s2+="1010";break;
                case 'B':s2+="1011";break;
                case 'C':s2+="1100";break;
                case 'D':s2+="1101";break;
                case 'E':s2+="1110";break;
                case 'F':s2+="1111";break;
                default:break;
            }
        }
        //将二进制数转为 八进制数 由数字逻辑所学知识  111(2)--->7(8) 即三位后进位 需要使得s2的长度能够对3整除
        if(s2.length()%3==1)
        {
            s2="00"+s2;
        }
        //8%3==2 需要补充一位  000111001 ---> 000 111 001
        if(s2.length()%3==2)
        {
            s2="0"+s2;
        }
		int flag=0;
        // i<7 即为 j(max)=6
        for(k=0;k<s2.length()-2;k+=3)
        {
            //字符串进行加减乘除操作 '1'-'0'=1 '0'-'0'=0
            int output=4*(s2[k]-'0')+2*(s2[k+1]-'0')+s2[k+2]-'0';
             //第一组 0 1 2 000 111 001
            //这里是为防止输入的十六进制数,输出的八进制数最前方有0的情况
            //同时在数据中间部分的0也要输出,否则输出错误
            /*
             * 931FA
             *
             * //010 010 011 "000" 111 111 010
             * 
             * */
            if(output)
            {
               flag=1;
            }
            if(flag)
            {
            	cout<<output;
			}
        }
        cout<<endl;
    }
    return 0;
}

四:十六进制转十进制代码

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1,s2;
    int i,j;
    long long sum=0;
    s2="";
    cin>>s1;
    for(i=0;i<s1.length();i++)
    {
       switch(s1[i]){
           case '0':s2+="0000";break;
           case '1':s2+="0001";break;
           case '2':s2+="0010";break;
           case '3':s2+="0011";break;
           case '4':s2+="0100";break;
           case '5':s2+="0101";break;
           case '6':s2+="0110";break;
           case '7':s2+="0111";break;
           case '8':s2+="1000";break;
           case '9':s2+="1001";break;
           case 'A':s2+="1010";break;
           case 'B':s2+="1011";break;
           case 'C':s2+="1100";break;
           case 'D':s2+="1101";break;
           case 'E':s2+="1110";break;
           case 'F':s2+="1111";break;
           default:break;
       }
    }
    for(j=0;j<s2.length();j++)
    {
        sum=sum*2+s2[j]-'0';
    }
    cout<<sum;
    return 0;
}

五:十进制转十六进制代码

#include<iostream>
#include<stack>
using namespace std;
int main()
{
    //十进制数
    long long n;
    //基:16 2为二进制,8为八进制
    int base=16;
    cin>>n;
    //创建栈
    stack<char>S;
    char a[]="0123456789ABCDEF";
    if(n==0) S.push(a[0]);
    //余数进栈
    while(n>0)
    {
        S.push(a[n%base]);
        n/=base;
    }
    //十六进制出栈
    while(!S.empty())
    {
        cout<<S.top();
        S.pop();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++算法进制间的转换 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 传导干扰与手机常见EMC处理措施

    原文来自公众号 工程师看海 以前文章讲了空间传导及其屏蔽 这一篇咱们继续解释传导干扰 同时介绍一些手机中常见的EMC抑制措施 差模共模干扰 差模干扰是两条线直线的噪声 这两条线上的电流大小相等 但方向相反 如果电流方向相同 这种模式就称为共
  • 【微信小程序】授权与重新授权

    授权与重新授权 js getUserInfo function e if e detail userInfo 用户按了允许授权按钮 var that this console log 用户的信息如下 console log e detail
  • 关于Proto的学习

    关于Proto的学习 proto文件来预先定义的消息格式 数据包是按照proto文件所定义的消息格式完成二进制码流的编码和解码 proto文件 简单地说 就是一个消息的协议文件 这个协议文件的后缀文件名为 proto proto其实就相当于
  • a标签新开页面sessionStorage丢失

    a标签新开页面sessionStorage丢失 场景 点击标签 新开一个页面 遇到的问题 打开新页面后重新跳转了登录页 查看后发现session空了 分析 cookie 同浏览器 不同tab 同源 同路径 localStorage 同浏览器
  • 外辐射源雷达信号模型

    发射端 基带 发射信号基带 u 基 t u 基 t u基 t 调制 发射信号调制后 u 调 t u 基 t exp j 2 f c t u 调 t u 基 t exp j2 pi f ct u调 t u基 t exp j2 fc t 第 m
  • 使用gdal的ogr创建shapefile文件(c++)

    1 ogr 使用ogr库创建点状要素的shapefile文件以及将经纬度坐标转为投影坐标 实例如下 include ogrsf frmts h include gdal h include gdal priv h include cpl s
  • Ops实践

    关注回复 学习交流群 加入 安全开发运维 答疑交流群 目录 本文为作者原创文章 为尊重作者劳动成果禁止非授权转载 若需转载请在 全栈工程师修炼指南 公众号留言 或者发送邮件到 master weiyigeek top 中我将及时回复 原文连
  • 去水印小程序源码,全新界面无加密,平台支持微信小程序和QQ小程序。支持解析抖音、快手、皮皮虾和微视等平台。带PHP下载接口。支持微信QQ流量主

    去水印小程序源码 平台支持微信小程序和QQ小程序 支持解析抖音 快手 皮皮虾和微视等平台 搭建教程 1 下载源码 并导入微信开发者工具 下载地址 扫描小程序 搜索 去水印小程序 或者联系作者 yhq4918 2 修改remove js中的d
  • LeetCode[动态规划]746.使用最小花费爬楼梯+198.打家劫舍

    746 使用最小花费爬楼梯 题目 给你一个整数数组 cost 其中 cost i 是从楼梯第 i 个台阶向上爬需要支付的费用 一旦你支付此费用 即可选择向上爬一个或者两个台阶 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯 请你计算
  • 【操作系统】基本分页和分段存储管理方式

    操作系统 基本分页和分段存储管理方式 参考文章 基本分页 https blog csdn net qq 28602957 article details 53588362 基本分段 https blog csdn net qq 286029
  • Postman 发送接口请求返回401 Unauthorized

    使用postman发送接口请求测试时 返回状态401Unauthorized 最终找到问题所在 是导入了Spring security包的问题 当我们使用了Spring security 之后 Spring Security默认对所有路径进
  • 整合短信验证码

    第一步 点击阿里云云市场 搜索短信 第二步 购买服务 第三步 按照文档操作 添加HttpUtils import org apache commons lang StringUtils import org apache http Http
  • 什么是Gravatar,以及为什么您应该立即开始使用它

    Often new WordPress users ask us about how the grey icon that shows up next to their name Sometimes we get emails from u
  • 李沐_动手学深度学习第5章卷积神经网络第二部分_笔记

    目录 1 卷积神经网络 LeNet 2 深度卷积神经网络 AlexNet 3 使用重复元素的网络 VGG 4 网络中的网络 NiN 5 含并行连结的网络 GoogLeNet 6 批量归一化 7 残差网络 ResNet 8 稠密连接网络 De
  • 跨界融合,共创智能汽车研发新生态(技术大会诚邀您的莅临)

    全球汽车产业正在经历技术变革 智能汽车不仅是汽车与人工智能 云计算 V2X技术 5G通信等多领域技术融合发展的产物 也是创新热点与未来发展的至高点 在软件定义汽车的趋势下 ICT技术向汽车产业不断渗透 SOA新架构 OTA 中央计算平台等新
  • u盘显示需要格式化才能用怎么办?修复方法

    u盘显示需要格式化才能用怎么办 u盘是常用的一款数据存储设备 但不少朋友在使用u盘的过程中 都遇到过这样的一个问题 就是u盘无法打开且提示需要将其格式化 这是什么原因导致的 又该如何解决呢 下面就一起来看看解决方法 造成u盘提示格式化的原因
  • C++日志系统log4cxx

    log4cxx有三个主要组件 loggers 记录器 appenders 输出源 和layout 布局 可以简单理解为日志类别 要输出的地方 输出形式 Logger 创建Logger Logger是有一个String类的名字识别的 且大小写
  • MySQL必知必会——第十章创建计算字段

    创建计算字段 本章介绍什么是计算字段 如何创建计算字段以及怎样从应用程序中使用别名引用它们 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式 例如 想在一个字段中显示公司名和地址 但公司名和地址在不同的列中等等 我们需要直接从数
  • Amazon CodeWhisperer亚马逊云代码生成器idea体验使用

    阿丹 自从接触到微服务以来发现要写的代码越来越多了 之前一直面向ChatGPT来编程 今天找到了一个新的ai代码生成器 体验一下 安装的过程给兄弟们演示一下 关键还是免费的 连接如下 AI 代码生成器 Amazon CodeWhispere
  • C++算法进制间的转换

    进制间的转换 进制转换方法是什么 进制转换的方法是 二进制数 十六进制数可以采用按权展开法转化为十进制数 十进制转化为R进制要分为两部分 其中整数部分要除R取余 直到商为0 小数部分要乘R取余直到得到整数 进制也就是进制位 对于接触过电脑的