首页>少儿编程>进制转换与C++中的进制的输入与输出

进制转换与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
二进制 八进制 三位一组    
二进制 十六进制 四位一组    
八进制 二进制 一位换三 除留余数法  
八进制 十六进制      
十六进制 二进制 一位换四 除留余数法  
十六进制 八进制      

除留余数法

Base_conversion_and_input_and_output_of_base_in_Cpp_p1

按权展开

比如将上面的二进制数“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++

移动端可扫我直达哦~

推荐阅读

cpp 2024-11-03

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

P11242碧树:叶子越远,枝干越长,已有的枝干再长一片叶子不影响枝干长度,最终就是枝干的长度加上叶子的总数。枝干总长取决于最远的那片叶子,叶子的总数题目中已经提供。P11248矩阵移动:三层循环,最内层循环k表示分别修改0、1、2、...

少儿编程 c++

cpp 2024-10-26

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

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

少儿编程 c++

cpp 2024-09-27

2024年 csp-j 以及 csp-s 初赛复赛分数查询接口

链接只是跳转到noi官网,并不是什么第三方的数据库,所以需要预先登陆noi官方网站哦。2024年复赛(2024年10月27日)成绩还没有出,仅尝试放链接备用。复赛接口csp-j复赛查分接口csp-s复赛查分接口2024年初赛(2024...

少儿编程 c++

cpp 2024-09-24

图解动态规划(一)-01背包和变体

在oiwiki学习01背包,虽然完成并通过了题目(洛谷P2871),但总感觉似懂非懂,干脆在画图软件上推演了一下,于是就有了这篇笔记。所谓01背包,一般是给定一个固定容量的容器(背包),并提供固定件数的物品,每件物品有各自的体积(或称...

少儿编程 c++

cpp 2024-09-17

c++中相爱相杀的cin与getline

在洛谷刷题,会遇到各种各种的输入情况,有的时候需要按个输入,而有时则需要按行输入,偶尔也有前一行按个输入,后一行按行输入这样的需求。Windows系统中,换行是由两个字符\r\n组成的。 \r为回车,其ASCII码是13,作用是回到当...

少儿编程 c++

cpp 2024-08-23

c++中的集合----set的使用方法

在C++中,set 是一个容器,用于存储唯一元素,且按特定顺序排序。其具备自动排序,快速查找,去重,插入效率高的特点。以下是定义和使用 set 的基本方法:#include<iostream> #include<se...

少儿编程 c++

cpp 2024-08-23

c++中的map库与它的遍历方式

map与unordered_mapC+提供 map 与unordered_map 两种关联容器,可以将key与value关联起来。 map 与unordered_map 区别:1.底层实现原理map:map内部实现了一个红黑树,该结构...

少儿编程 c++

cpp 2024-08-23

C++利用递归求全排列的笔记

这是一篇洛谷题号P1157题目的题解笔记,该题解的作者是feecle6418,自己写了一大段程序之后看到这么简洁的方式求组合,感觉还是挺挫败的。关键是,看完了题解还看不太懂......#include<bits/stdc++.h...

少儿编程 c++

cpp 2024-07-22

C++位运算的习题解析与若干技巧

洛谷刷题的时候遇到了一些位运算的题目,看得一头雾水,于是临时起意,单独开一篇习题集,用来记录刷题过程中遇到的位运算相关习题。文章准备分为两部分,前半部分为一些常用技巧,后半部分为习题记录,随时补充。位运算的若干技巧位运算的习题集习题部...

少儿编程 c++