爱乐眼底图像分析

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10141|回复: 7

输出二进制 C++

[复制链接]
发表于 2012-9-2 11:29:32 | 显示全部楼层 |阅读模式

想知道怎样输出二进制。我们知道C++输出十六进制是cout〈〈hex〈〈 a;而八进制是cout〈〈 ocx〈〈 a;二进制则没有默认的输出格式,需要自己写函数进行转换,于是上网搜索了一下。网上思路真是广泛啊。下面列出一些方法。  

#include 〈iostream〉  

#include 〈list〉  

#include 〈bitset〉  

using namespace std;

//递归输出二进制函数  

  1. void BinaryRecursion(int n)  
  2. {  
  3.   int a;  
  4.   a=n%2;  
  5.   n=n〉〉1;  
  6.   if (n==0)  
  7.    ;  
  8.   else  
  9.    BinaryRecursion(n);  
  10.   cout〈〈a;  
  11. }
复制代码


回复

使用道具 举报

 楼主| 发表于 2012-9-2 11:30:11 | 显示全部楼层

//使用容器转换二进制  

  1. void BinaryVector(int n)  
  2. {  
  3.   int temp;  
  4.   temp=n;  
  5.   list〈int〉 L;  
  6.   while(temp!=0)  
  7.   {  
  8.    L.push_front(temp%2);  
  9.    temp=temp〉〉1;  
  10.   }  
  11.   for (list〈int〉::iterator iter=L.begin();iter!=L.end();iter++ )  
  12.    cout〈〈*iter;  
  13.   cout〈〈endl;  
  14. }
复制代码


回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-2 11:30:46 | 显示全部楼层
//一般方法,32位,逐步与1做与运算。  
  1. void Binarycout(int n)  
  2. {  
  3.   for (int i=31;i〉=0;i--)  
  4.   {  
  5.    cout〈〈((n〉〉i)&1);  
  6.   }  
  7.   cout〈〈endl;  
  8. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-2 11:31:31 | 显示全部楼层
//使用bitset转换二进制  
  1. void BinaryBitset(int n)  
  2. {  
  3.   cout〈〈bitset〈sizeof(int)*8〉(n)〈〈endl;  
  4. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-2 11:32:11 | 显示全部楼层
测试程序:
  1. int main()  
  2. {  
  3.   int a=1045,b=2;  
  4.   int c;  
  5.   c=a+b;  
  6.   cout〈〈"BinaryRecursion(c):";  
  7.   BinaryRecursion(c);  
  8.   cout〈 BinaryVector(c);  
  9.   cout〈〈"Binarycout(c):";  
  10.   Binarycout(c);  
  11.   cout〈〈"BinaryBitset(c):";  
  12.   BinaryBitset(c);  
  13.   cout〈〈"BinaryChar(c):";  
  14.   BinaryChar(c);  
  15.   //cout〈 return 0;  
  16. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-2 11:32:52 | 显示全部楼层
运行后的结果如下:  
  1. BinaryRecursion(c):10000010111  
  2. BinaryVector(c):10000010111  
  3. Binarycout(c):00000000000000000000010000010111  
  4. BinaryBitset(c):00000000000000000000010000010111  
  5. BinaryChar(c):10000010111  
  6. Press any key to continue
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-2 11:33:56 | 显示全部楼层

从中可以看出,有两种运算会得出32位的结果,不太好。对C++还不是很精通,所以这个效率还不是很清楚哪个个好。觉得用容器的可能会好些吧。如果是C,就用字符转换函数,或者直接除后和1做与运算。


  1. #include<stdio.h>
  2. void printb(int,int);
  3. int main()
  4. {
  5.      int x;
  6.      printf("Input number:");
  7.      scanf("%d",&x);
  8.      printb(x,sizeof(int)*8);
  9.      putchar('\n');
  10.      return 0;
  11. }
  12. void printb(int x,int n)
  13. {
  14.      if(n>0)
  15.      {
  16.          putchar('0'+((unsigned)(x&(1<<(n-1)))>>(n-1)));
  17.          printb(x,n-1);
  18.      }
  19. }
复制代码


回复 支持 反对

使用道具 举报

发表于 2012-9-2 22:25:34 | 显示全部楼层
  1. char *binary[]={"0000","0001","0010","0011","0100","0101","0110","0111",
  2.    "1000","1001","1010","1011","1100","1101","1110","1111"};
  3. /*int m; m中是32位的二进制补码*/
  4. for(i=0;i<8;i++)
  5. {
  6.    k=(m&0xf0000000)>>28; /*只取前四位,移到最后边*/
  7.    printf("%5s",binary[k]); /*查表查出对应的二进制字符串输出 */
  8.    m=m<<4; /*m右移4位*/
  9. }/*只循环8次,查表比计算效率更高*/
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



QQ|Archiver|手机版|小黑屋|爱乐眼底图像分析 ( 京ICP备1201155号 )        

GMT+8, 2024-12-26 17:52 , Processed in 0.054632 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表