【006】C++数据类型之进制间的转换

news2024/12/27 0:43:10

C++数据类型之进制间的转换

  • 引言
  • 一、进制的概述
  • 二、十进制转二进制、八进制、十六进制(短除法)
  • 三、二进制、八进制、十六进制转十进制(位次幂)
  • 四、其他进制间的转换
    • 4.1、二进制转八进制
    • 4.2、二进制转十六进制
    • 4.3、八进制转二进制
    • 4.4、十六进制转二进制
    • 4.5、八进制转十六进制
    • 4.6、十六进制转八进制
    • 4.7、注意
  • 总结

引言


💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
👉
🎖️ CSDN实力新星,社区专家博主
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu


🔔 上一篇:【005】C++数据类型之实型(浮点数)、有符号数以及无符号数

一、进制的概述

  • 二进制:0~1,以0b开头,bitset< 8 >输出。
  • 八进制:0~7,以0开头,oct输出。
  • 十进制:0~9,以数字开头,cout默认输出十进制。
  • 十六进制:0 ~ 9和A ~ F,以0x开头,hex输出,不区分正负。
  • n进制:0~n-1。

二、十进制转二进制、八进制、十六进制(短除法)

在这里插入图片描述
示例1:123转二进制,得0b0111 1011。
示例2:123转八进制,得0173。
示例3:123转十六进制,得0x7B。

通用算法:

void DecimalToOtherNumbers(int num,int other, char b[], int maxlen)
{
	memset(b, 0, maxlen);
	int n = num;
	if (num < 0)
		n = 0 - num;
	if (maxlen <= 0)
		return;
	int sum = n / other;
	int len = 0;
	while (sum != 0)
	{
		if (len >= maxlen)
			break;
		if (n % other>10)
		{
			b[len] = n % other + 'A'-10;
		}
		else
			b[len] = n % other + '0';
		n /= other;
		sum = n / other;
		len++;
	}
	b[len] = n % other + '0';

	// 现在是倒序的,需要对调位置,使其符合阅读习惯
	int idx = 0;
	while (idx < len)
	{
		int tmp = b[idx];
		b[idx] = b[len];
		b[len] = tmp;
		idx++;
		len--;
	}
}

三、二进制、八进制、十六进制转十进制(位次幂)

转换公式:
在这里插入图片描述
示例1:二进制0b11000011转为二进制, 1 × 2 7 + 1 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 = 195 1 \times 2^7+1 \times 2^6+0 \times 2^5+0 \times 2^4+0 \times 2^3+0 \times 2^2+1 \times 2^1+1 \times 2^0 = 195 1×27+1×26+0×25+0×24+0×23+0×22+1×21+1×20=195

示例2:将八进制数0123转换为十进制, 1 × 8 2 + 2 × 8 1 + 3 × 8 0 = 83 1\times8^2+2\times8^1+3\times8^0=83 1×82+2×81+3×80=83

示例3:将十六进制0x12转为十进制, 1 × 1 6 1 + 2 × 1 6 0 = 18 1\times16^1+2\times16^0=18 1×161+2×160=18

四、其他进制间的转换

4.1、二进制转八进制

从右往左,每3位二进制对应1位八进制。

1101 1010
11 011 010
3 3 2

所以二进制1101 1010转八进制就是0332。

4.2、二进制转十六进制

从右往左,每4位二进制对应1位十六进制。

1101 1010
D ----- A

所以二进制1101 1010转十六进制就是0xDA。

4.3、八进制转二进制

一位八进制对应三位二进制。

0123
001 010 011
0101 0011

所以八进制0123的二进制就是0101 0011。

4.4、十六进制转二进制

一位十六进制对应四位二进制。

0x123
0001 0010 0011

所以十六进制0x123的二进制就是0001 0010 0011。

4.5、八进制转十六进制

八进制先转为二进制,再从二进制转为十六进制。没有直接方式。

八进制 --> 二进制 --> 十六进制
0123 --> 0101 0011 --> 0x53

4.6、十六进制转八进制

十六进制先转为二进制,再从二进制转为八进制。没有直接方式。

十六进制 --> 二进制 --> 八进制
0x12 --> 0001 0010 --> 022

4.7、注意

不同进制仅仅是数据的不同表现形式而已。
示例:

#include <iostream>
#include <bitset>

using namespace std;

int main()
{
	int num=100;
	cout<<"num的二进制:"<<bitset<8>(num)<<endl;
	cout<<"num的八进制:"<<oct<<num<<endl;
	cout<<"num的十进制:"<<dec<<num<<endl;
	cout<<"num的十六进制:"<<hex<<num<<endl;
	return 0;
}

输出:
在这里插入图片描述

总结

C++ 中常见的数字进制有十进制、二进制、八进制、十六进制。转换这些进制可以使用以下方法:

  1. 从十进制转换到其他进制:
  • 二进制:使用除以 2 取余数的方法,将得到的余数倒序排列即为二进制。
  • 八进制:使用除以 8 取余数的方法,将得到的余数倒序排列即为八进制。
  • 十六进制:使用除以 16 取余数的方法,将得到的余数转换为对应的字母或数字,倒序排列即为十六进制。
  1. 从其他进制转换到十进制:
  • 二进制:将每一位数乘以对应的权重(2 的 n 次方),再将结果相加即可得到十进制。
  • 八进制:将每一位数乘以对应的权重(8 的 n 次方),再将结果相加即可得到十进制。
  • 十六进制:将每一位数转换为对应的十进制数,乘以对应的权重(16 的 n 次方),再将结果相加即可得到十进制。
  1. 从一个进制转换到另一个进制:
    先将原数转换为十进制,再将十进制转换为目标进制。

例如,将十进制数 42 转换为二进制:
42 / 2 = 21 … 0
21 / 2 = 10 … 1
10 / 2 = 5 … 0
5 / 2 = 2 … 1
2 / 2 = 1 … 0
1 / 2 = 0 … 1
得到的余数倒序排列即为二进制数 101010。
在这里插入图片描述

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

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

相关文章

Ubuntu18.04+Xenomai-3.2.1下安装igH EtherCAT Master

一、安装Xenomai-3.2.1 Ubuntu18.04安装Xenomai实时内核https://blog.csdn.net/m0_56451176/article/details/130608887?spm=1001.2014.3001.5501 二、安装igH EtherCAT Master 2.1安装所需工具 sudo apt install autoconf autogen libtool 2.2下载IgH源码 EtherCAT安装…

赤道Kelvin和Rossby波 Part-1(简要介绍)

Equatorial Kelvin and Rossby Waves 赤道Kelvin和Rossby波&#xff1b;在该部分简要介绍 Kelvin waves和Rossby waves是海洋对西风突发等外界作用力变化的调整方式。这种调整是通过受重力、科氏力f以及科氏力的南北变化 ∂ f / ∂ y β \partial f/\partial yβ ∂f/∂yβ影响…

基于脑功能连接模式解码六种基本情绪

近日&#xff0c;北京大学心理认知与科学学院、IDG麦戈文脑科学研究所方方课题组&#xff0c;在《Science China Life Sciences》 在线发表了题为“Decoding six basic emotions from brain functional connectivity patterns”的研究论文。该工作结合滑窗技术和随机森林模型&a…

为了流量,何同学做了个“假B站”?

何同学是B站知名数码博主&#xff0c;凭借优秀的视频制作能力&#xff0c;内容创新获得广大年轻用户的喜欢。 2021年的时候&#xff0c;UP主老师好我叫何同学就发布了一条制作AirDesk的视频&#xff0c;随后迅速在社交媒体中引发了大量关注。 当时&#xff0c;该视频为B站全站…

ROS:launch文件加载:已有地图(yaml)、rviz、turtlebot3模型、gazebo模型、move_base、amcl

一.下载turtlebot3、建立地图文件yaml和pgm ROS&#xff1a;gazebo创建仿真地图&#xff0c;turtlebot3加载仿真地图进行建图&#xff0c;生成yaml和pgm地图信息_Charlesffff的博客-CSDN博客 二.创建目录 其中amcl.launch和move_base.launch目录在turtlebot3中&#xff1a; 其…

把二叉搜索树转换为累加树

1题目 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下&#xff0c;二叉搜索树满足下列约束条件…

jpg怎么转换成png格式?四种转换方式试试看

很多时候&#xff0c;我们需要将JPG&#xff08;Joint Photographic Experts Group&#xff09;格式转换成PNG&#xff08;Portable Network Graphics&#xff09;格式&#xff0c;从而便于图片的使用。那么&#xff0c;将JPG转换成PNG有什么作用呢&#xff1f;首先&#xff0c…

【LeetCode】203,移除链表元素。 难度等级:简单。链表入门题目,值得深入研究。

文章目录 一、题目二、解答&#xff1a;迭代法&#xff0c;引入一个新的头结点三、难点解释 【LeetCode】203&#xff0c;移除链表元素。 难度等级&#xff1a;简单。 本题是链表入门题目&#xff0c;值得深入研究。 一、题目 二、解答&#xff1a;迭代法&#xff0c;引入一个…

Kali-linux使用SET实施攻击

前面介绍了社会工程学工具包&#xff08;SET&#xff09;的简单使用。为了能帮助用户更容易的理解社会工程学的强大功能。本节将介绍使用社会工程学工具包实施各种攻击。 7.4.1 针对性钓鱼攻击向量 针对性钓鱼攻击向量通过构造特殊文件格式的漏洞进行渗透攻击&#xff0c;如利…

python实现神经网络之---构建神经元模型1(python3.7)

本文主要要以周志华的机器学习书为蓝本编写 第5章神经网络 5.1python 实现神经元模型 神经网络中最基本的成分是神经元 (neuro且)模型&#xff0c;如下图所示&#xff1a; 1943 年&#xff0c; [McCulloch and Pitts, 1943] 将上述情形抽象为国 5.1所示的简单模型&#xff0c…

全球分布式云大会:AntDB超融合流式实时数仓,打造分布式数据库新纪元

日前&#xff0c;全球分布式云大会北京站在北京金茂万丽酒店举办&#xff0c;亚信科技AntDB数据库受邀参会&#xff0c;会上技术负责人北陌发表以“AntDB超融合流式实时数仓&#xff0c;打造分布式数据库新纪元”为主题的演讲&#xff0c;通过分享AntDB在数据库前沿技术的研发实…

打印菱形(两种思路)

一、输入的行数等于上半部分的金字塔行数 思路&#xff1a; 仔细观察图形&#xff0c;可以发现&#xff0c;此图形中是由空格和*按照不同个数的输出组成的。 上三角&#xff1a;先输出空格&#xff0c;后输出*&#xff0c;每行中空格&#xff1a;从上往下&#xff0c;一行减少一…

国外各大学和学院对于ChatGPT使用立场总结

ChatGPT和生成式AI的快速普及对教育这个专业领域带来了威胁——全国各地的大学和学院都召开了紧急会议&#xff0c;讨论如何应对学生利用AI作弊的风险。 一部分学校和教授担心这项技术会成为学生在论文或其他写作作业和考试中寻求捷径的工具。而这种生成内容的方式往往能够绕开…

Deepstream使用Rabbitmq 和kafka发送消息(天坑)unable to connect to broker library

连接服务器失败&#xff0c;要么是是本地参数没设对, 要么服务器没开&#xff01; 使用Kafka发送消息好搞&#xff0c;按照 /opt/nvidia/deepstream/deepstream-6.2/sources/libs/kafka_protocol_adaptor/README 一步一步来就行了&#xff0c;前提是要搞kafka 环境搭建开启&am…

特殊区域在OSPF协议中的分析

我们都知道OSPF路由器协议是基于SPF算法计算最优路径&#xff0c;当用于SPF算法的LSDB的越大&#xff0c;那么路由器的计算压力就越大&#xff0c;对于一些性能不佳的OSPF路由器来说&#xff0c;如何尽可能的减小LSDB规模也就成了OSPF设计时要考虑到的问题&#xff0c;为了进一…

DMA-STM32

DMA-STM32 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源 12个独立可配置的通道:DMA1 (7个通道),DMA2 (5个通道) 每个通道都支持软件触发和特定的硬件触发 STM32…

第七章.链接

概述 链接&#xff1a;将多个目标文件或库文件组合在一起&#xff0c;生成可执行文件或共享库 可以执行于编译时、加载时、运行时&#xff0c;使得分离编译成为可能&#xff0c;由链接器自动实现链接器&#xff1a;将各个模块之间的符号引用解析为实际的内存地址&#xff0c;生…

大厂面试官带你Get求职面试核心技巧

本文首发自[慕课网] &#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"及“慕课网公众号”&#xff01; 作者&#xff1a;Brain|慕课网名师 Hello&#xff0c;大家好&#xff0c;我是Brian 老师&#xff0c;在开发领域摸爬滚…

Day01 关系型数据MySQL简介与多平台安装配置

在大数据的课程中&#xff0c;我们需要处理的数据来自不同的渠道&#xff0c;其中有一个很重要的渠道就是关系型数据库中存储的数据。在企业中&#xff0c;会把业务数据存储在关系型数据库中&#xff0c;一般以MySQL居多。另外&#xff0c;我们在后续的课程中需要学习Hive、Spa…

SpringBoot启动过程源码解析

一&#xff0c;构造SpringApplication对象 1、推测web应用类型 如果项目依赖中存在org.springframework.web.reactive.DispatcherHandler&#xff0c;并且不存在org.springframework.web.servlet.DispatcherServlet&#xff0c;那么应用类型为WebApplicationType.REACTIVE如果…