| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3153 人关注过本帖, 1 人收藏
标题:几个问题,大家解解看
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
回复 6楼 zisefengye
嘿,想清楚了再说

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 20:11
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
没想到N年不玩C了,偶竟然还能答上个一二,偶现在得照照镜子去。。。。。

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 20:14
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用Knocker在2010-7-31 20:11:36的发言:

嘿,想清楚了再说
能否指点迷津?
2010-07-31 21:22
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用BlueGuy在2010-7-31 20:10:22的发言:

原来如此,有个隐式转换。果然够猥琐。/
#define chDIMOF(Array) (sizeof(Array) / sizeof(Array[0]))window核心编程里就是这么写的。
其实现在stdlib.h中已经有_countof(_Array)
原形是:
/* _countof helper */
#if !defined(_countof)
#if !defined(__cplusplus)
#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
#else
extern "C++"
{
template <typename _CountofType, size_t _SizeOfArray>
char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) sizeof(*__countof_helper(_Array))
}
#endif
#endif

sizeof()返回的类型是size_t,其实是unsigned int。我都测试过了把程序改成:
for(d=0;d <= (COUNTS-1);d++)
        printf("%d\n",array[d]);
就能够打印出所有元素。所以我认为是-1导致直接跳过循环。


[ 本帖最后由 zisefengye 于 2010-7-31 21:41 编辑 ]
2010-07-31 21:29
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
收藏
得分:0 
//问题:下面程序的输出是什么?为什么?
  #include <stdio.h>
  #include <stdlib.h>
  int main()
  {
       float a = 12.5;
//     int b=3;
       printf("%d\n", a);  //没有找到合适的类型匹配,置0了,估计是这样
//     printf("%d\n",b,a);  //这样打印为3
       printf("%d\n", *(int *)&a);
       system("PAUSE");
       return 0;
  }

惟有学习不断的学习!
2010-07-31 21:33
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用lishizelibin在2010-7-31 21:33:01的发言:

//问题:下面程序的输出是什么?为什么?
  #include
  #include
  int main()
  {
       float a = 12.5;
//     int b=3;
       printf("%d\n", a);  //没有找到合适的类型匹配,置0了,估计是这样
//     printf("%d\n",b,a);  //这样打印为3
       printf("%d\n", *(int *)&a);
       system("PAUSE");
       return 0;
  }
没那么简单,假如你输入12.1,就不是0。我都一一测试过。
2010-07-31 21:38
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
收藏
得分:0 
回复 16楼 zisefengye
哦,那我就不明白了,我那也是我假设的,估计是这样

惟有学习不断的学习!
2010-07-31 21:42
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
请真相帝出来解释一下,我们需要了解知识。
2010-07-31 21:51
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
float = [sign bit] [7 exponent bits] [23 mantissa bits]
12.5 = 0 10000010 10010000000000000000000
= 0x41480000
= 1095237632
2010-07-31 21:56
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
回复 楼主 BJ_BOY
程序代码:
int noName(unsigned int x)
{
    int count=0;
    while(x)
    {
         count++;
         x = x&(x-1);
     }
     return count;
}


显然是算x的2进制中1的个数。
2010-07-31 21:59
快速回复:几个问题,大家解解看
数据加载中...
 
   



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

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