进制转换与C++中的进制的输入与输出

常用进制

十六进制是一种基数为 16 的计数系统,是一种逢 16 进 1 的进位制。通常用数字 0、1、2、3、4、5、6、7、8、9 和字母 A、B、C、D、E、F(a、b、c、d、e、f)表示,其中: A~F 表示 10~15,这些称作十六进制数字。十进制数是组成以10为基础的数字系统,有 0,1,2,3, 4, 5, 6, 7, 8, 9 十个基本数字组成。十进制,英文名称为 Decimal System,来源于希腊文 Decem,意为十。十进制计数是由印度教教徒在 1500 年前发明的,由阿拉伯人传承至 11 世纪。八进制,Octal,缩写 OCT 或 O,一种以 8 为基数的计数法,采用 0,1,2,3,4,5,6,7 八个数字,逢八进 1。一些编程语言中常常以数字 0 开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。二进制是计算技术中广泛采用的一种数制。 二进制数据是用 0 和 1 两个数码来表示的数。 它的基数为2,进位规则是"逢二进一",借位规则是"借一当二"。 二进制数(binaries)是逢2进位的进位制,0、1是基本算符 ;计算机运算基础采用二进制。

HEX,英文全称 Hexadecimal,表示十六进制。
DEC,英文全称 Decimal,表示十进制。
OCT,英文全称 Octal,表示八进制。
BIN,英文全称 Binary,表示二进制。

cin的进制选择

利用前文提及的英文缩写,我们很方便的按进制输入,其中按十进制输入时,“dec”这个前缀是可以省略的:

//输入一个八进制数
int x;
cin>>oct>>x;

//输入一个十进制数
int y;
cin>>dec>>y;

//输入一个十六进制数
int z;
cin>>hex>>z;

直接利用cout输出值到屏幕时,如果按八进制输入x为“77”,cout的输出值为“7x8+7=63”,因为cout的默认输出也是按照10进制,所以想要输出不同进制的数,也需要添加前缀:

//输入一个八进制数
int x;
cin >> oct >> x;
cout << oct << x;

//输入一个十进制数
int y;
cin >> dec >> y;
cout << dec << x;

//输入一个十六进制数
int z;
cin >> hex >> z;
cout << hex << x;

bitset库与二进制

bitset是C++语言的一个类库,用来方便地管理一系列的bit位而不用程序员自己来写代码。bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计。可以如下声明一个该类型变量:

bitset<N>varm (M)

其中varm为变量名;N表示该类型在内存中占的位数,是二进制;M表示变量varm的初始值。下面的代码展示了如何按2进制输入一个数字,并分别以2进制与10进制输出到屏幕:

#include <iostream>
#include<bitset>
using namespace std;
int main(){
    bitset<16> sint;
    cin >> sint;
    cout << sint << endl;
    cout << sint.to_ulong() << endl;
}

常用进制转换方法汇总表

原进制 目标进制 方法1 方法2 方法3
十进制 二进制 bitset指定格式输出 除留余数法 itoa
十进制 八进制 oct/%o指定格式输出 除留余数法 itoa
十进制 十六进制 hex/%x指定格式输出 除留余数法 itoa
二进制 十进制 按权展开   strtol
八进制 十进制 按权展开   strtol
十六进制 十进制 按权展开   strtol
二进制 八进制 三位一组    
二进制 十六进制 四位一组    
八进制 二进制 一位换三 除留余数法  
八进制 十六进制      
十六进制 二进制 一位换四 除留余数法  
十六进制 八进制      

除留余数法

进制转换与C++中的进制的输入与输出

按权展开

比如将上面的二进制数“1011001”展开为10进制数:

$$1*2^6+0*2^5+1*2^4+1*2^3+0*2^2+0*2^1+1*2^0=89$$

小数的进制

10进制纯小数转2进制小数的方法,就是对小数部分乘二之后,对整数位取整。整数位为0就是零,为1就是1,然后整数位归零。重复这个过程。事实上,对于其他进制,这个方法也同样有效,比如下面这道题目:

与十进制数 28.5625 相等的四进制数是( )。
 A. 123.21
 B. 131.22
 C. 130.22
 D. 130.21

小数部分先乘以4,得2.25,记录整数部分的值2,继续用小数部分乘以4,得到1,也就意味着,10进制下0.5625的值在4进制下可以表示为0.21。

标签: c++

移动端可扫我直达哦~

推荐阅读

thumbnail 2025-08-25

c语言中的 fstream 与 freopen 区别

fstream(C++风格)和 freopen(C风格)都是用于文件输入/输出的工具,但它们在设计理念、用法和灵活性上有根本性的区别。核心概览 特性fstream (C++)freopen (C)所属语言标准C++C编程范式面向对象 ...

少儿编程 c++

thumbnail 2025-08-24

c++面向对象--类的学习笔记

在学习类之前,相信很多人跟博主一样,已经学习过结构体。在 C++ 中,struct 和 class 的区别非常小,几乎只是默认访问权限的不同。默认访问权限/继承权限:struct 的默认成员访问权限和默认继承方式都是 public。c...

少儿编程 c++

thumbnail 2025-08-23

栈上数组和堆上数组

对比表格 特性栈上数组堆上数组内存位置栈内存堆内存声明方式int arr[10];int* arr = new int[10];生命周期所在作用域结束自动释放需要手动delete[]释放大小确定编译时确定(必须是常量)运行时确定(可以...

少儿编程 c++

thumbnail 2025-08-03

方格取数与传纸条-双人网格路径问题

24年在洛谷刷刷题,遇到过一个双人路径问题,P1004 [NOIP 2000 提高组] 方格取数,题解的4维数组对于博主这样一个菜鸟,实在难以理解,于是就搁置了。然而25年的时候又遇到了P1006 [NOIP 2008 提高组] 传纸...

少儿编程 c++

thumbnail 2025-07-16

二分查找无解为什么用 n+1

二分查找是一种在有序数组中查找特定元素的高效算法。它的基本思想是通过不断地将查找范围减半来快速定位目标元素。然而,在某些情况下,二分查找可能无法找到目标元素,这时就需要处理无解的情况。关于二分查找无解时使用 n+1 的原因,可以从以下...

少儿编程 c++

thumbnail 2025-07-16

关于后缀和的哨兵值

在二分查找结合后缀和(Prefix Sum / Suffix Sum)的问题中,哨兵值(Sentinel Value) 的作用是:处理边界情况(如所有元素都不满足条件时)。防止数组越界访问(如 sum[-1] 或 sum[n+1])。...

少儿编程 c++

thumbnail 2025-02-13

CSP-J/S认证有年龄限制吗

刚在朋友圈看到这则通知,去官网确认了一下属实,个人觉得这是好事,童年该有童年应有的样子。学习计算机科学有益于培养青少年的逻辑思维及用计算机解决实际问题的能力。但是,这需要一定的基础和认知能力,并非越早越好。近年来,参加CCF非专业级软...

少儿编程 c++

thumbnail 2024-11-03

小鸟数据个人洛谷练习极简题解

P5788单调栈:初始化空栈存储下标,从右向左遍历数组,维护栈的单调递减性:当栈非空且当前元素大于等于栈顶元素时弹出栈顶,然后将当前下标入栈,此时栈顶即为当前元素右边第一个更大元素的位置(若栈空则记为0)。从右向左遍历能保证栈中元素均...

少儿编程 c++

thumbnail 2024-10-26

宁波地区选手csp-j复赛一日游

2024年的CSP-J/S复赛依旧没有杭州以外的考点,全省的OIER齐聚杭州,也是盛况空前。我们家是被分到了杭州师范大学的下沙校区,全程约140+公里,高德导航显示2小时能到。考虑考试当天可能拥堵,过早起床也怕孩子考场犯困,所以订了前...

少儿编程 c++