CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

格式化I/O

楼主AllenCpp(AllenCpp)2006-02-21 21:00:27 在 C/C++ / C++ 语言 提问

#include<iostream>  
  using   namespace   std;  
   
  void   showflags(ios::fmtflags   f);  
   
  int   main()  
  {  
  ios::fmtflags   f;  
  f=cout.flags(f);  
   
  showflags(f);  
  cout.setf(ios::showpos);  
  cout.setf(ios::scientific);  
   
  f=cout.flags();  
  showflags(f);  
   
  cout.unsetf(ios::scientific);  
   
  f=cout.flags();  
  showflags(f);  
   
  return   0;  
  }  
   
  void   showflags(ios::fmtflags   f)  
  {  
  long   i;  
   
  for(i=0x4000;i;i=i>>1)  
  if(i&f)  
  cout<<"l   ";  
  else  
  cout<<"0   ";  
  cout<<"\n";  
  }  
  结果是:  
  0   0   0   0   0   l   0   0   0   0   0   0   0   0   l  
  l   0   l   l   l   0   0   l   l   l   0   l   l   0   0  
  l   0   0   l   l   0   0   l   l   l   0   l   l   0   0  
  程序是按书打的,程序的基本含义我能明白,但是为什么会出这个结果呢?大概是showflags()函数中十六进制的某些地方我还不理解,请各位大哥告知,谢谢~~~~~~ 问题点数:40、回复次数:2Top

1 楼du51(郁郁思扬)回复于 2006-02-21 21:46:02 得分 30

大概是showflags()函数中十六进制的某些地方我还不理解,请各位大哥告知,谢谢~~~~~~?  
   
  这个程序是显示当前操作符的二进制.另外.0x4000应为0x8000  
   
  它在内存中是1000000000000000  
  任何一个数与它相与得到非零值,说明,它的最高位为1.应该输出1  
  若为0输出0  
  然后右移变为0100000000000000  
  任何一个数与它相与得到非零值,说明,它的第二们应该为1,输出1  
  若为0输出0  
  依次后推.直到0000000000000001  
  这时已经到最后一位了.  
  这是一个显示二进制的代码.  
   
   
  程序如下会更清晰.  
  #include<iostream>  
  using   namespace   std;  
   
  void   showflags(ios::fmtflags   f);  
   
  int   main()  
  {  
  ios::fmtflags   f;  
   
  f=cout.flags();  
  showflags(f);  
   
  cout.setf(ios::showpos|ios::scientific);  
  f=cout.flags();  
  showflags(f);  
   
  cout.unsetf(ios::scientific);  
  f=cout.flags();  
  showflags(f);  
   
  cout.unsetf(ios::showpos);  
  f=cout.flags();  
  showflags(f);  
   
          system("PAUSE");  
  return   0;  
  }  
   
  void   showflags(ios::fmtflags   f)  
  {  
  long   i;  
   
  for(i=0x8000;i;i>>=1)  
  if(i&f)  
  cout<<"l   ";  
  else  
  cout<<"0   ";  
  cout<<"\n";  
  }  
   
  结果如下:  
  /*  
  0   0   0   l   0   0   0   0   0   0   0   0   0   0   l   0  
  0   0   0   l   l   0   0   l   0   0   0   0   0   0   l   0  
  0   0   0   l   l   0   0   0   0   0   0   0   0   0   l   0  
  0   0   0   l   0   0   0   0   0   0   0   0   0   0   l   0  
  请按任意键继续.   .   .  
  */  
   
  第一行与第四行一样,分次移除了.也反映了或运算的实质.  
   
   
   
  Top

2 楼wshcdr(dd)回复于 2006-02-21 21:49:43 得分 10

void   showflags(ios::fmtflags   f)  
  {  
  long   i;  
   
  for(i=0x4000;i;i=i>>1)  
  if(i&f)  
  cout<<"l   ";  
  else  
  cout<<"0   ";  
  cout<<"\n";  
  }  
   
  该函数用来在显示f的值啊  
  Top

相关问题

  • 格式化
  • 怎么格式化?
  • 格式化文件,
  • 日期格式化
  • 数值格式化
  • 时间格式化
  • 格式化日期
  • 格式化问题
  • 格式化问题
  • 有关软盘格式化

关键词

  • showflags
  • fmtflags
  • cout
  • unsetf
  • showpos
  • ios
  • scientific
  • setf
  • flags

得分解答快速导航

  • 帖主:AllenCpp
  • du51
  • wshcdr

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo