首页 > 其他分享 >最简单理解进制转换

最简单理解进制转换

时间:2023-07-22 15:45:06浏览次数:24  
标签:10 转换 进制 int num 理解 baseNum

转换十进制

对于十进制123我们可以表示成为\(3*10^0+2*10^1+1*10^2\),而同样对于2进制转换称为10进制可以用相同的方法,即将进制基数从最低位开始从0次方开始与其该位的数字相乘
例如:
二进制1110转换十进制,进制基数就是2,从最低位\(2^0\)开始计算:

\[0*2^0 + 1*2^1 + 1 * 2 ^2 + 1*2^3 = 14 \]

对于其他进制转换为十进制其方法时一样的,将进制基数从最低位0次方开始每次乘以该位上的数然后相加。

int base = 1; //进制基数初始化为1,应为最低位0次方等于1
int num = 1110; //需要转换为十进制的数
int result = 0; //保留结果
int baseNum = 2;  //进制基数
while(num != 0){
	result = result + num%10 * base;  //对10取余是为了取到当前num的最低位
	num = num /10; //将已经计算了的最低位去除
	base  = base * baseNum  //进制位的平方进一;
}
printf("%d",result);

十进制转换到二进制

十进制转换到二进制我们一般用除位取余法,即将十进制数每次都除以需要转换的进制基数,保留每次的余数,然后将商继续除位取余,直到商为0;
例如将十进制数11转换为二进制数:
11除以2,得商为5,余数为1:
5除以2,得商为2,余数为1:
2除以2,得商为1,余数为0:
1除以2,得商为0,余数为1,算法终止。
将余数从后往前输出,得1011即为11的二进制数。

int num = 14; //需要转换的十进制数
int save[100001] = {-1}; //用一个数组来保存转换后的结果
int baseNum = 2; //进制基数
int counter = 0;
while(num != 0){
	save[counter++] = num%baseNum;  //保存当前余数
	num = num/baseNum; //去除最低位
}
//将结果数组逆向打印
for(int i = counter-1; i >=0; i--){
	printf("%d",save[i]);
}

进制转换到进制

我们可以得到一个简单的思想,对于将任意进制转换到任意进制,我们只需要将该进制转换为10进制,然后再用除位取余将该10进制转换为指定进制即可。

#include<stdio.h>
#include<iostream>
using namespace std;
class Solution{
    public:
    /*
    baseNum: 需要转换的进制数
    base: 需要转换的进制数的进制
    converBase: 需要转换到几进制
    */
    void bastToBase(int baseNum,int base,int converBase){
        
        int sumFirstBase = 0;  //用来存储baseNum转换到十进制的数
        int product = 1;  //用来提高BaseNum每次末尾的进制位
        while(baseNum != 0){  //循环,每次都抹掉最低位,直到为0
        sumFirstBase+=(baseNum%10)*product;  //每次等于sumFirstBase自身加上当前baseNum最低位乘以单前的进制位
        baseNum/=10; //抹掉最低位
        product*=base; //提高一次进制位
        }
        int result[10000] = {-1};  // 用一个数组来存储这个转换结果
        int num = 0;
        do{
            result[num++] = sumFirstBase%converBase;  //将sumFirstBase对需要转换的进制取余,得到的余数存进数组
            sumFirstBase/=converBase; //将取过一次余的最低位抹掉
        }while(sumFirstBase!=0); 
        //反向打印数组,得到该转换结果
        for(int i = (num-1);i >=0;i--){
            printf("%d",result[i]);
        }
    }
};
int main(){
    Solution solution;
    solution.bastToBase(1103,8,2);
    printf("\n");
}

标签:10,转换,进制,int,num,理解,baseNum
From: https://www.cnblogs.com/elunking/p/17573468.html

相关文章

  • Java数字转换为字符
    Java数字转换为字符在Java编程中,我们经常需要将数字转换为字符。这种转换可以在很多场景中使用,比如将数字转换为字符以便于打印、将数字转换为字符以便于进行字符操作等等。本文将介绍在Java中如何进行数字到字符的转换,并提供一些代码示例来帮助读者更好地理解。使用Character类......
  • SCA技术进阶系列(三):浅谈二进制SCA在数字供应链安全体系中的应用
    数字经济时代,随着开源应用软件开发方式的使用度越来越高,开源组件逐渐成为软件开发的核心基础设施,但同时也带来了一些风险和安全隐患。为了解决这些问题,二进制软件成分分析技术成为了一种有效的手段之一。通过对二进制软件进行成分分析,可以检测其中的潜在风险,并提供对用户有价值的......
  • iOS 多线程自己的理解
    .创建线程的平均开销:内存堆栈:主线程——1M,子线程——512K时间:基本可以忽略不计a.不可改变的对象,通常是线程安全的b.主线程负责处理响应事件线程安全的类和函数:NSArray,NSData,NSNumber.....非线程安全:NSBundle,NSCoder,NSArchiver......
  • bellman-ford算法理解
    bellman-ford算法理解从本题谈起再回归到最短路。本题为限制边数的最短路,是这个算法优势领域的题目。为什么它能解决?最外层每循坏一次,就是各点向外走一条边,内层对边的遍历是对所有边进行松弛操作,每次进行该操作时,需要用到备份数组,目的是防止连锁反应,保证每次每个点到起点的距离......
  • 计算凸多边形的重叠面积(原理解析)
    版权声明:遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。参考文章:https://blog.csdn.net/xuyin1204/article/details/107768030本文主要是参考了CSDN博主xuyin1204关于计算两个多边形的重叠面积的文章,并做了原理的相关分析。代码放在文末首先将两个多边形分解为......
  • js实现颜色转换
    //hex转rgba第一种consthex2Rgb=(hexValue,alpha=1)=>{constrgx=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;consthex=hexValue.replace(rgx,(m,r,g,b)=>r+r+g+g+b+b);constrgb=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.e......
  • 如何理解小程序插件?微信及支付宝官方详解
    一、小程序插件功能介绍1、如何理解插件插件,英文名可称作“Plug-in、Plugin、add-in、addin、add-on、addon或extension”,是一个依附于主程序的辅助程序,透过和主程序的互动,用来代替主程序需要增加一些所需的特定功能。更通俗的来讲,就类似机器的零件,可以“插入”的形式添加到程......
  • C++的四种强制类型转换
    将类型名作为强制转换的语法是C语言保留下来的,C++有自己独有的类型转换,就是四种cast。它们都有着统一的语法,即xx_cast<typename>(expression),可以将expression转换成typename的类型。static_cast顾名思义,静态转换,通常用于内置类型的转换。但是不能用于不同类型的指针/引用之间......
  • 论文翻译: FREEVC:朝着高质量、无文本、单次转换声音的目标迈进
    原文:FREEVC:TOWARDSHIGH-QUALITYTEXT-FREEONE-SHOTVOICECONVERSION原文地址:https://ieeexplore.ieee.org/abstract/document/10095191 个人总结:1.提出mel谱缩放增强方法。2.基于VITS框架进行改进,BUT在对照实验中缺没有对比VITS3.引入WavLM模型提高VC模型对说话人内容......
  • 二进制方式安装docker
    如何使用二进制方式安装Docker一、安装Docker所需环境在开始安装Docker之前,我们需要确保系统满足以下要求:操作系统:64位的Linux系统,如Ubuntu、CentOS等内核版本:3.10以上可执行文件格式:x86_64存储:至少20GB的可用空间内存:至少2GB的可用空间二、安装Docker下面是一份二进制......