首页>少儿编程>进制转换与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-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++

cpp 2024-07-21

C++中的变量类型与常用数据类型

常用数据类型不同的数据类型,在不同的说明方式下,其长度和表示数据的范围也都有所不同,可以用sizeof函数来打印不同数据类型所占字节的大小:#include <iostream> using namespace std; ...

少儿编程 c++

cpp 2024-07-19

c++运算符结合性与连续比较运算

其实已经发过一篇关于优先级的博文,之所以要补充上结合性,是因为今天做到一道费解的题目,题目原文如下:/* 执行以下 C++ 语言程序后,输出结果是( )。 A. 56 B. 13 C. 12 D. 60 */ #inclu...

少儿编程 c++

cpp 2024-07-18

c++竞赛中常见的算法模板汇总

排序桶排序简化版桶排序,准备一个较大数组作为用于存放数据的桶,当读入某个值比如9时,让9号桶(b[9])+1,遍历完所有值后,回过头看b数组中的值,如果值为1的,就输出该位置的下标一次,如果值为2的,就输出该位置的下标为2,这是一种以...

少儿编程 c++

cpp 2024-07-18

c++中的输入输出指令cin与cout

使用这两个命令需要包含iostream库,这个库一般也是接触c++之时首先认识的一个库,但如果想要对输入输出进行格式控制的话,我们还需要导入另一个iomanip库。c++支持c语言风格的scanf以及printf来进行输入输出,历史悠...

少儿编程 c++