免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5571 | 回复: 7
打印 上一主题 下一主题

请问如何打印 出double,float等数据在机器内的二进制位格式样子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-29 08:52 |只看该作者 |倒序浏览
thinkinginc++书中一个例子:
其中有函数:
void printBinary(const unsigned char val) {
      for(int i = 7; i >;= 0; i--)
              if(val & (1 << i))
                        std::cout << "1";
          else
                    std::cout << "0";
} ///:~

然后想打印个浮点数的二进制位:
int main(int argc, char* argv[]) {
  if(argc != 2) {
    cout << "Must provide a number" << endl;
    exit(1);
  }
  double d = atof(argv[1]);
  unsigned char* cp =
    reinterpret_cast<unsigned char*>;(&d);
  for(int i = sizeof(double); i >; 0 ; i -=2) {
    printBinary(cp[i-1]);
    printBinary(cp);
  }
}

那个for 循环中干嘛要i-=2呢,然后打印这样的顺序:cp[i-1],cp
为什么呢.
谢谢

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-11-29 11:56 |只看该作者

请问如何打印 出double,float等数据在机器内的二进制位格式样子

因为你一个for中有两个
printBinary(cp[i-1]);
printBinary(cp);
就去掉了两个字节呀,为什么不是 -=2 呢?又不是一个字节一个字节处理的.

cp?i=sizeof(doble),是否不对?

论坛徽章:
0
3 [报告]
发表于 2004-11-29 13:41 |只看该作者

请问如何打印 出double,float等数据在机器内的二进制位格式样子

[quote]原帖由 "THEBEST"]eof(doble),是否不对?[/quote 发表:


晕!我当然知道for里头i-1了啊,我说的是为什么这么打印呢?
干吗不按顺序,一个一个的连续打印呢?按i,i-1,i-2,,,,,,的顺序。
而且,这个地方sizeof(double)=8? 好像超过边界了。呵呵。不懂。
有没有看过thinkingincpp的书啊。上面的例子。
谢谢

论坛徽章:
0
4 [报告]
发表于 2004-11-29 17:29 |只看该作者

请问如何打印 出double,float等数据在机器内的二进制位格式样子

因为在内存中每个字的高位存在高字节,低位存在低字节,而内存是反向生长的,所以要把高低位换一下啊

论坛徽章:
0
5 [报告]
发表于 2004-11-29 18:05 |只看该作者

请问如何打印 出double,float等数据在机器内的二进制位格式样子

[quote]原帖由 "cellar"]因为在内存中每个字的高位存在高字节,低位存在低字节,而内存是反向生长的,所以要把高低位换一下啊[/quote 发表:

for(int i = sizeof(double); i >; 0 ; i -=2) {
printBinary(cp[i-1]);
printBinary(cp);
}
i的初值是sizeof(double),8
就是打印 cp[7],cp[8],cp[6], .....1
怎么这么呢。8~1???干吗不是7~~0?
谢谢。
此外,这个地方用c的强制转换也是一样的“效果”吧。

论坛徽章:
0
6 [报告]
发表于 2004-11-30 22:29 |只看该作者

请问如何打印 出double,float等数据在机器内的二进制位格式样子

原帖由 "shelleycao" 发表:
.1
怎么这么呢。8~1???干吗不是7~~0?
谢谢。
此外,这个地方用c的强制转换也是一样的“效果”吧。

论坛徽章:
0
7 [报告]
发表于 2004-11-30 23:12 |只看该作者

请问如何打印 出double,float等数据在机器内的二进制位格式样子

rt

论坛徽章:
0
8 [报告]
发表于 2004-11-30 23:14 |只看该作者

请问如何打印 出double,float等数据在机器内的二进制位格式样子

  1. void print_float_hex(float f)
  2. {
  3. union{float f; int i}test;
  4. test.f=f;
  5. printf("%12.7e||||||||||%#010x\n",test.f,test.i);
  6. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP