| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2100 人关注过本帖, 1 人收藏
标题:来点有意思的---代码很简单,看谁不用编译器一眼得出正确结果
只看楼主 加入收藏
ln6265431
Rank: 5Rank: 5
等 级:职业侠客
帖 子:66
专家分:325
注 册:2012-3-29
收藏
得分:0 
程序在这种情况下应该是现在后面的数据列表是否有符合其类型若符合就按七世纪值,若不符合就输出随机值吧……好像?
2012-04-23 23:44
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
求解释
2012-04-24 08:06
Dick_G
Rank: 2
等 级:论坛游民
帖 子:21
专家分:84
注 册:2012-4-7
收藏
得分:0 
回复 楼主 wuya156
好像整形的函数要有返回值吧!
2012-04-24 12:27
S_Ringo
Rank: 4
来 自:歌舞伎町
等 级:业余侠客
帖 子:94
专家分:230
注 册:2012-4-15
收藏
得分:0 
#include<stdio.h>
int main()
{
    printf("%f\n",5);
    printf("%d\n",5.01);
    printf("%x\n",5);
    printf("%x\n",5.01);
    return(0);
}
输出:0.000000
      1889785610
      5
      70A3D70A
应该不是随机值……求LZ详解……
2012-04-24 14:23
简体字01
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:137
注 册:2012-3-4
收藏
得分:0 
是啊,求解。
2012-04-24 22:29
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
前提:在32位机器下,基于IEEE 754
5(int型为4字节)存储:00000000 00000000 00000000 00000101
而00000000 00000000 00000000 00000101作为浮点数读取时值当然就是0!
而5.01作为浮点数存储:01000000 10100000 01010001 11101100
将01000000 10100000 01010001 11101100作为整数读取时取值为多少呢?

[ 本帖最后由 cnfarer 于 2012-4-26 15:03 编辑 ]

★★★★★为人民服务★★★★★
2012-04-25 10:02
S_Ringo
Rank: 4
来 自:歌舞伎町
等 级:业余侠客
帖 子:94
专家分:230
注 册:2012-4-15
收藏
得分:0 
回复 26楼 cnfarer
是啊,那个用十六进制输出也不对嘛……
好吧,就算我对十六进制理解不对,但是,再怎么说,第一位是符号位大家都没异议吧?
可是用十六进制输出5.02,得出e147ae14,这个显然第一位是1了,这个确实很难理解,难道我的编译器有问题?我用的盗版VC6……
还是输出语句有问题?
printf("%x\n",5.02);
这句有木有问题哦?求指教
2012-04-25 10:48
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
我只是从数据在内存中存储的角度看。这个问题,还要看printf函数是如何处理的。

★★★★★为人民服务★★★★★
2012-04-25 11:58
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
5.01 存储为double时为01000000 00010100 00001010 00111101  01110000 10100011 11010111 00001010,而右32位的值为正好是1889785610即 70A3D70A
5.02 存储为double时为01000000 00010100 00010100 01111010  11100001 01000111 10101110 00010100,则右32位的值是多少呢?
从你运行的结果说明,printf("%x\n",5.01);中的5.01是以double型来处理的,printf不会将其转换为整型的。

[ 本帖最后由 cnfarer 于 2012-4-25 13:08 编辑 ]

★★★★★为人民服务★★★★★
2012-04-25 12:08
S_Ringo
Rank: 4
来 自:歌舞伎町
等 级:业余侠客
帖 子:94
专家分:230
注 册:2012-4-15
收藏
得分:0 
回复 29楼 cnfarer
貌似懂了……
我原以为%x可以将所有数值全部输出,所以输出8位数让我以为5.01是按float格式存储的……
所以对5.02开头的那个e特别纠结……
2012-04-25 14:16
快速回复:来点有意思的---代码很简单,看谁不用编译器一眼得出正确结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012989 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved