博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++知识整理(进制)
阅读量:5864 次
发布时间:2019-06-19

本文共 3598 字,大约阅读时间需要 11 分钟。

++输出二进制、十进制、八进制和十六进制总结

分类:
592人阅读
(0)

在C++中,默认状态下,数据按十进制输入输出。如果要求按八进制或十六进制输入输出,在cin或cout中必须指明相应的数据形式,oct为八进制,hex为十六进制,dec为十进制。但是二进制没有默认的输出格式,需要自己写函数进行转换。

输入整数n , 则在C++中cout<<hex<<n; cout<<oct<<n; cout<<dec<<n; 会分别将整数n以十六进制、八进制和十进制的形式输出

代码注解

 

[cpp]
  1. #include <iostream>   
  2. #include <bitset>   
  3.   
  4. using namespace std;  
  5.   
  6. int main(void)  
  7. {  
  8.     int i,j,k,l;  
  9.     cout<<"Input i(oct),j(hex),k(hex),l(dec):"<<endl;  
  10.     cin>>oct>>i;  //输入为八进制数   
  11.     cin>>hex>>j;  //输入为十六进制数   
  12.     cin>>k;   //输入仍为十六进制数   
  13.     cin>>dec>>l; //输入为十进制数   
  14.     cout<<"hex:"<<"i = "<<hex<<i<<endl;  
  15.     cout<<"dec:"<<"j = "<<dec<<j<<'\t'<<"k = "<<k<<endl;  
  16.     cout<<"oct:"<<"l = "<<oct<<l;  
  17.     cout<<dec<<endl;  //恢复十进制数输出状态   
  18.     return (0);  
  19. }  
#include 
#include
using namespace std;int main(void){ int i,j,k,l; cout<<"Input i(oct),j(hex),k(hex),l(dec):"<
>oct>>i; //输入为八进制数 cin>>hex>>j; //输入为十六进制数 cin>>k; //输入仍为十六进制数 cin>>dec>>l; //输入为十进制数 cout<<"hex:"<<"i = "<
<
<

 

调试运行

 

思考与提示

1.    在接收输入时,必须在cin中指明数制,否则从键盘输入时,不认八进制和十六进制数开头的0和0x标志。指明后可省略0和0x标志。

2.    进制控制只适用于整型变量,不适用于实型和字符型变量。

3.    输入数据的格式、个数和类型必须与cin中的变量一一对应,否则不仅使输入数据错误,而且影响后面其他数据的正确输入。

4.    cincout指明数制后,该数制将一直有效,直到重新指明使用其他数制。

下面是C++中二进制输出的总结

代码注解

[cpp]
  1. #include <iostream>   
  2. #include <list>   
  3. #include <bitset>   
  4. #include <iomanip>   
  5.   
  6. using namespace std;  
  7.   
  8. //递归输出二进制函数   
  9. void BinaryRecursion(int n)  
  10. {  
  11.     int a;  
  12.     a = n % 2; // 取余   
  13.     n = n >> 1;  //右移一位 相当于除以2   
  14.     if(0 != n)  
  15.     {  
  16.         BinaryRecursion(n);  
  17.     }  
  18.     cout<<a;  
  19. }  
  20.   
  21. //使用容器转换二进制   
  22. void BinaryVector(int n)  
  23. {  
  24.     int temp;  
  25.     temp = n;  
  26.     list <int> L;  
  27.     while(0 != temp)  
  28.     {  
  29.         L.push_front(temp % 2);  
  30.         temp = temp >> 1;  
  31.     }  
  32.   
  33.     for(list <int>::iterator iter = L.begin(); iter != L.end(); iter++)  
  34.     {  
  35.         cout<<*iter;  
  36.     }  
  37.     cout <<endl;  
  38. }  
  39.   
  40. //一般方法,32位,逐步与1做与运算   
  41. void Binarycout(int n)  
  42. {  
  43.     for(int i = 31; i>= 0; i--)  
  44.     {  
  45.         cout<<((n>>i)&1);  
  46.     }  
  47.   
  48.     cout<<endl;  
  49. }  
  50.   
  51. //使用bitset转换二进制   
  52. void BinaryBitset(int n)  
  53. {  
  54.     cout<<bitset<sizeof(int)*8>(n)<<endl;  
  55. }  
  56.   
  57. int main()  
  58. {  
  59.     int a = 1045, b = 2;  
  60.     int c;  
  61.     c = a + b;  
  62.     cout<<setw(20)<<"BinaryRecursion("<<c<<"):";  
  63.     BinaryRecursion(c);  
  64.     cout<<endl;  
  65.   
  66.     cout<<setw(20)<<"BinaryVector("<<c<<"):";  
  67.     BinaryVector(c);  
  68.   
  69.     cout<<setw(20)<<"Binarycout("<<c<<"):";  
  70.     Binarycout(c);  
  71.   
  72.     cout<<setw(20)<<"BinaryBitset("<<c<<"):";  
  73.     BinaryBitset(c);  
  74.   
  75.     return (0);  
  76. }  
#include 
#include
#include
#include
using namespace std;//递归输出二进制函数void BinaryRecursion(int n){ int a; a = n % 2; // 取余 n = n >> 1; //右移一位 相当于除以2 if(0 != n) { BinaryRecursion(n); } cout<
L; while(0 != temp) { L.push_front(temp % 2); temp = temp >> 1; } for(list
::iterator iter = L.begin(); iter != L.end(); iter++) { cout<<*iter; } cout <
= 0; i--) { cout<<((n>>i)&1); } cout<
(n)<

调试运行

思考与提示

[cpp]
  1. //递归输出二进制函数   
  2. void BinaryRecursion(int n)  
  3. {  
  4.     int a;  
  5.     a = n % 2; // 取余   
  6.     n = n >> 1;  //右移一位 相当于除以2   
  7.     if(0 != n)  
  8.     {  
  9.         BinaryRecursion(n);  
  10.     }  
  11.     cout<<a;  
  12. }  
//递归输出二进制函数void BinaryRecursion(int n){	int a;	a = n % 2; // 取余	n = n >> 1;  //右移一位 相当于除以2	if(0 != n)	{		BinaryRecursion(n);	}	cout<

递归层次

使用递归的代价是十分巨大的:它会消耗大量的内存!!递归循环时它用的是堆栈,而堆栈的资源是十分有限的。假设调用该递归函数的主函数为0,则从主函数调用递归函数进入1;从第i层递归调用本身为进入“下一层”,即i+1。反之,退出第i层递归应返回至“上一层”,即i-1

为了保证递归函数正确执行,系统需设立一个“递归工作栈”作为整个递归函数运行期间使用的数据存储区。每一层递归所需信息构成一个“工作记录”,其中包括所有的实参、所有的局部变量以及上一层的返回地址。

每进入一层递归,就产生一个新的工作记录压入栈顶。每退出一层递归就从栈顶弹出一个工作记录,则当前执行层的工作记录必须是递归工作栈栈顶的工作记录,称这个记录为“活动记录”,并称指示活动记录的栈顶指针为“当前环境指针”。

如上图所示:当n 不等于0时,保存当前层的“工作记录”,然后递归调用进入下一层,直到n 等于0 ,此时是第四层,把当前层的a值 1 打印出来,然后退出第4层递归,返回至“上一层”即第4 – 1 层,即第3层。然后打印此层的a值 0,依次递归返回打印其余层。最后得到结果为 1010.

指定数据输出宽度:用C++提供的函数setw()指定输出数据项的宽度。setw()括号中通常给出一个正整数值,用于限定紧跟其后的一个数据项的输出宽度。如:setw(8)表示紧跟其后的数据项的输出占8个字符宽度。setw()只能限定紧随其后的一个数据项,输出后即回到默认输出方式。使用setw()必须在程序开头再增加一句: #include<iomanip>

 

参考来源

转载地址:http://daunx.baihongyu.com/

你可能感兴趣的文章
pandas和matplotlib和
查看>>
nginx开启core dump文件
查看>>
怎么用pfSense为你的web服务做负载均衡
查看>>
emma的几个不足之处
查看>>
selenium-2 使用xpath定位元素
查看>>
Java工具类——UUIDUtils
查看>>
使用Node搭建reactSSR服务端渲染架构
查看>>
文件缓存
查看>>
生成固定大小的占位图片
查看>>
作业五 :团队项目准备素材搜集
查看>>
转 博弈类题目小结(hdu,poj,zoj)
查看>>
Java NIO学习笔记八 Pipe
查看>>
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
CF1027D Mouse Hunt 思维
查看>>
一、策略模式
查看>>
关于在elasticSearch中使用聚合查询后只显示10个bucket的问题
查看>>
OMXCodec::read()已经两次遇到等待不到锁而卡死的情况
查看>>
KVO键-值观察编程指南
查看>>