深入浅出详解进制转换

news2024/10/6 12:25:54

1.进制转换

在这里插入图片描述

1.十进制转其他进制

1.整数转换(短除法)
  • 以十进制数520为例,分别转换为二进制、八进制、十六进制,转换过程如下:

在这里插入图片描述

  • 短除法:转进制除以几,余数倒过来为结果
2.小数转换
  • 例如:转换为2进制:用2乘以小数部分,每次都将结果整数取出,然后用剩余小数部分继续乘以2,直到小数部分为零,或者达到要求的精度为止

在这里插入图片描述

2.其他进制转十进制:位权相加

位权相加:

  • 首先,需要对其他进制进行编号,个位为0,整数部分从右往左依次为0 1 2 3 4…,小数部分从左往右依次为 -1 -2 -3 -4…
  • 然后,把每一位的数通过这个公式计算:数值*基数(该数是几进制)编号,然后把结果相加,即得到转换结果
1.二进制10 0000 1000 转十进制
98 7654 3210 编号
10 0000 1000 B
1*2^9+1*2^3=520D(结果)
2.八进制1010转十进制
3210 编号
1010 O
1*8^3+1*8^1=520D(结果)
3.十六进制208转十进制
210 编号
208 H
2*16^2+8*16^0=520H(结果)
4.二进制转十进制带小数

在这里插入图片描述

543210 -1 -2 -3 编号
100001. 1  0  1 B
1*2^5+1*2^0+1*2^-1+1*2^-3=33.625

八进制、十六进制与二进制相互转换(拆位与合位)

  • 八进制与二进制:一个八进制数可以拆分为3个二进制数,3个二进制数可以合成一个八进制数

    //二进制转八进制
    001 000 001 000 B
     1   0   1   0  O
        
    //八进制转二进制
     1   3   1   4   5   2   0  O
    001 011 001 100 101 010 000 B
    
  • 十六进制与二进制:一个十六进制数可以拆分为4个二进制数,4个二进制数可以合成一个十六进制数

    //二进制转十六进制
    0010 0000 1000 B
     2     0    8  H
        
    //十六进制转二进制
     1    3    1    4    5    2    0   H
    0001 0011 0001 0100 0101 0010 0000 B 
    
为什么可以这样拆位与合位
  • 三位二进制数表示的范围是0-8 ——> 23 对于八进制来说刚刚好
  • 四位二进制数表示的范围是0-16 —–> 24 对于16进制来说刚刚好

2.进制转换练习

1.1-1.二进制转十进制

从键盘输入二进制串(可以带小数,也可以不带小数),编写程序将其转换成二进制并输出。
样例输入:100001.101
样例输出:33.625

#include<stdio.h>
#include<string.h>
#include<math.h>
void transition2_10(char str[], int point, int len);
int main()
{
	char str[100] = { 0 };
	gets_s(str, 100);
	int point = 0, len = strlen(str);
	for ( int i = 0; i < len; i++)
	{
		if(str[i]=='.')
		{
			point = i;
			break;
		}
		point = i+1;   //point指向整数的后一位
	}
	transition2_10(str, point, len);
	return 0;
}

void transition2_10(char str[], int point, int len)
{
	long left_Sum = 0;
	double right_Sum = 0;
	int right = 0, left = -1;
	for (int i = point; i > 0; i--)            //整数部分的和
	{
		left_Sum += (str[i - 1] - '0') * pow(2, right);    //-'0'把字符转换为整数
		right++;
	}
	for (int j = point+1 ; j < len; j++)       //小数部分的和
	{
		right_Sum += (str[j] - '0') * pow(2, left);
		left--;
	}
	printf("%f", right_Sum + left_Sum);
}

2.1-2.十进制整数转二进制

样例输入:267
样例输出:100001011
提示:可用下列方法实现
(1)用逻辑与运算、逻辑左移判断某一位是否为1(不能使用数组、字符串函数)
(2)用数组实现
(3)用字符串函数实现

#include <stdio.h>
#define _Max 32
int main()
{
	int m = 0, n = 0;
	int sum[_Max] = { 0 };
	scanf("%d", &m);
	while ( m )
	{
		sum[n++] = m % 2;
		m /= 2;
	}
	for (int i = n-1; i >= 0 ; i--)
	{
		printf("%d", sum[i]);
	}
	return 0;
}

3.1-3.十进制小数转二进制

样例输入:0.71875
样例输出:0.10111
说明:小数点后不超过10位

#include<stdio.h>
int main()
{
	double n;
	scanf("%lf", &n);
	printf("0.");
	while ( n > 0 )
	{
		n *= 2;
		if (n >= 1)
		{
			printf("1");
			n -= 1;
		}
		else
		{
			printf("0");
		}
	}
	return 0;
}

4.1-4.带小数的十进制转二进制

(2017蓝桥杯湖北师范大学校内选拔赛试题)
样例输入:327.671875
样例输出:10100 0111.101011
说明:小数点后不超过10位

#include<stdio.h>
#define _Max 32
void transition10_2(double k);
int main()
{
	double m;
	scanf("%lf", &m);
	transition10_2(m);
	return 0;
}

void transition10_2(double k)
{
	double n;
	int x = 0, a[_Max] = { 0 }, i = 0;
	x = (int)k;           //整数部分
	n = k - x;            //小数部分

	while (x)
	{
		a[i++] = x % 2;
		x /= 2;
	}
	for (int j = i - 1; j >= 0; j--)
	{
		printf("%d", a[j]);
	}

	if (n > 0)
	{
		printf(".");
	}

	while (n > 0)
	{
		n *= 2;
		if (n >= 1)
		{
			printf("1");
			n -= 1;
		}
		else
		{
			printf("0");
		}
	}
}

5.1-5.十六进制转二进制

样例输入:16AC9
样例输出:1 0110 1010 1100 1001

#include <stdio.h>
#include <string.h>
#define N 100
int main()
{
	int i = 0;
	char ch, a[N] = { 0 };
	while ((ch = getchar()) != '\n')
	{
		switch ( ch )
		{
		case '0':strcat(a, "0000");	break;
		case '1':strcat(a, "0001");	break;
		case '2':strcat(a, "0010");	break;
		case '3':strcat(a, "0011");	break;
		case '4':strcat(a, "0100");	break;
		case '5':strcat(a, "0101");	break;
		case '6':strcat(a, "0110");	break;
		case '7':strcat(a, "0111");	break;
		case '8':strcat(a, "1000");	break;
		case '9':strcat(a, "1001");	break;
		case 'A':strcat(a, "1010");	break;
		case 'B':strcat(a, "1011");	break;
		case 'C':strcat(a, "1100");	break;
		case 'D':strcat(a, "1101");	break;
		case 'E':strcat(a, "1110");	break;
		case 'F':strcat(a, "1111");	break;
		}
	}
	while (a[(i++)] == '0');
	puts(a + i - 1);
	return 0;
}

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

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

相关文章

Java | 详解创建Web项目、配置Tomcat服务器、实现登录效果

本Demo为本人自学&#xff0c;部分技术已不是前沿技术&#xff0c;望谅解。 目录 一、相关工具及技术 1、相关工具 2、相关技术 3、相关 jar 包 二、IDEA 创建 web 项目 1、创建空项目 2、classes目录和lib目录配置 3、tomcat 服务器配置 三、MySQL 配置 1、登录 mysql 2、创…

Leetcode - 485. 最大连续 1 的个数

与其后悔与抱怨&#xff0c;不如从现在改变 485. 最大连续 1 的个数 - Easy 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续…

原油期货在哪里交易?美原油期货和布伦特原油期货选择哪个交易更好?

石油是与人类社会及经济息息相关的能源&#xff0c;从工业生产、交通运输&#xff0c;以至制造塑胶产品、化妆品及衣服纤维等&#xff0c;无孔不入地渗透我们的日常生活与工商业活动。石油经开采后&#xff0c;未经加工的状态通称为原油&#xff0c;既是不可或缺的能源&#xf…

新茶饮 200+ 门店优化库存成本,需要几个数据分析师?

小 L 是一家茶饮门店的店长&#xff0c;她所在的新茶饮企业已经在全国布局了超过 200 家实体门店。小 L 每周除了整理 Excel 数据向区域总监汇报外&#xff0c;还要抽时间站到柜台前&#xff0c;完成总部要求的“在前线做决策”。虽然忙碌&#xff0c;但还能 Hold 得住&#xf…

云图联动创宇智脑,打造高价值威胁情报赋能的威胁处置闭环与攻击溯源

网络对抗日趋激烈&#xff0c;《关基保护要求》提出更高检测防御要求&#xff0c;高级威胁检测面对需求升级&#xff0c;知道创宇推出创宇云图与创宇威胁情报网关、创宇智脑威胁情报平台联防联控方案&#xff0c;打破单个网络安全产品的孤岛&#xff0c;充分发挥产品联动方案的…

数据结构(2)—算法

&#xff08;1&#xff09;小白建议学习青岛大学王卓老师的数据结构视频&#xff0c;或者购买程杰老师的大话数据结构。 &#xff08;2&#xff09;邀请加入嵌入式社区&#xff0c;您可以在上面发布问题&#xff0c;博客链接&#xff0c;公众号分享&#xff0c;行业消息&#x…

【SpringMVC】数据格式化+数据验证

目录 一、前言 二、目录结构 三、数据格式化 四、数据验证 五、数据格式化、验证梳理图 六、数据格式化、验证梳理图 相关文章 【SpringMVC】入门篇&#xff1a;带你了解SpringMVC的执行流程【SpringMVC】入门篇&#xff1a;带你了解SpringMVC的执行流程 【SpringMVC】使用篇&a…

ref的使用方法 ,组件通信父传子,组件通信子传父,组件分离模块化, v-model 传值的3种方式

原生获取一个节点&#xff1a;document.getElementById() vue方式操作dom节点&#xff1a;ref 通过给元素设定ref属性在vue实例中获取这个元素: <input type"text" ref"input" placeholder"请输入内容"> 组件挂载后(mounted)才能访问…

【重要】有三AI技术专栏作者邀请,5大权益助力共同成长

知识分享平台众多&#xff0c;我们有三AI公众号是其中一个&#xff0c;在过去的3年里&#xff0c;我们已经写了700多篇&#xff0c;超过200万字的技术文&#xff0c;其中一些专栏作者的贡献功不可没。我们公众号只做原创内容&#xff0c;因为我并不希望平台成为一个靠复制转载内…

通过运维编排实现自动化智能运维与故障自愈

自动化帮助用户消除重复性任务&#xff0c;从而降低运营成本、提高效率并提高团队生产力。但是&#xff0c;将自动化引入复杂的 IT 环境还需要编排。编排是指一次性自动执行多项任务&#xff0c;涉及到计算机系统、中间件和服务的自动布置、协调和管理&#xff0c;利用自动执行…

10个最频繁使用的聚类算法 Python 实现(附完整代码)

大家好&#xff0c;聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术&#xff0c;用于发现数据中的有趣模式&#xff0c;例如基于其行为的客户群。 有许多聚类算法可供选择&#xff0c;对于所有情况&#xff0c;没有单一的最佳聚类算法。相反&#xff0c;最好探索一…

46. 批量规范化

训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使他们收敛更加棘手。 本节将介绍批量规范化&#xff08;batch normalization&#xff09;,这是一种流行且有效的技术&#xff0c;可持续加速深层网络的收敛速度。 再结合在 将介绍的残差块&#xff0c;批量规范…

盘点 | 基于小程序语法的跨端开发平台

最近&#xff0c;微信于2022年12月18日悄悄的推出了一款名叫“Donut”的开发平台。根据开发文档的产品介绍来看&#xff0c;该平台的核心是多端框架&#xff0c;支持使用小程序进行代码编写&#xff0c;并进行多端编译&#xff0c;从而实现多端开发。 目前Donut开发平台已经开…

Android 音视频入门/进阶教程

后续的音视频文章&#xff0c;都会在这里更新 作为安卓开发仔&#xff0c;对音视频这块&#xff0c;一直是比较感兴趣的&#xff0c;所以&#xff0c;本着学习和记录的态度&#xff0c;我也把我所学的知识记录起来&#xff0c;希望对想音视频感兴趣的小伙伴有所帮忙。 一. 基础…

SpringBoot maven 项目 JDBC 连接多源数据库

此方法支持 mysql&#xff0c;oracle&#xff0c;postgre&#xff0c;sqlserver等等 基本逻辑&#xff1a;1. 加载驱动; 2. 通过DriverManager传入数据库地址&#xff0c;用户名&#xff0c;密码&#xff0c;获取本地数据库连接 1. pom文件下添加依赖 <dependency><…

Android 多线程下载以及断点续传

多线程下载 在日常开发中&#xff0c;我们不可避免的会接到类似这样的需求&#xff0c;下载一个比较大的素材文件或者安装包文件&#xff0c;以此实现APP的自动更新&#xff0c;APP内的素材替换等。由于一般此类文件都比较大&#xff0c;一般会在50M以上&#xff0c;如果我们不…

高效好用的开发工具箱——猿如意

目录 前言&#xff1a; 1.我常用的功能介绍 2.主要功能chatGPT测评 3.我的使用体验和改进建议 前言&#xff1a; 猿如意是一款帮助开发的效率工具&#xff0c;集成了许多有用的工具和文档教程。帮助开发者提升开发效率&#xff0c;帮你从“问题”找到“答案”。尤其是12月…

加注超融合 星辰天合推出 XHERE V2 系列

近日&#xff0c;北京星辰天合科技股份有限公司&#xff08;简称&#xff1a;“XSKY星辰天合”&#xff09;成功举办了主题为“能存会算&#xff0c;创新不断”的 XHERE 超融合新品渠道推介会&#xff0c;正式向市场推出 XHERE V2 超融合软件平台。通过继续加大对超融合产品线的…

上云节省 35%计算资源,420 个运维人天:运满满实时计算实践和思考

摘要&#xff1a;本文整理自满帮实时数据团队 TL 欧锐&#xff0c;在 FFA 2022 行业案例专场的分享。本篇内容主要分为四个部分&#xff1a;满帮业务及平台架构介绍实时数据实时产品未来计划Tips&#xff1a;点击「阅读原文」查看原文视频&演讲 ppt01满帮业务及平台架构介绍…

数据可视化系列-01大数据可视化基础

文章目录1.概述2.大数据可视化基础2.1 数据可视化基础知识1、数据可视化简史&#xff1a;2、数据可视化是什么&#xff1a;3、数据可视化的分类&#xff1a;4、数据可视化流程&#xff1a;5、数据可视化的意义&#xff1a;2.2 认识BI和数据可视化工具1、BI的简介&#xff1a;BI…