gpt4 book ai didi

c++ - 为什么我在使用基于clock()的timer MACRO时会得到一个负值?

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:29 25 4
gpt4 key购买 nike

<分区>

宏是这样的:

#define MAX 10000000
#define CNT 1000000
#define TIMER_INIT \
clock_t starttime, endtime; \
#define TIMER(txt, process) \
starttime = clock(); \
process; \
endtime = clock(); \
printf("%-20s %20ld\n", \
txt, (endtime - starttime))

主要代码如下:

char vector2[CNT/8 + 1];

TIMER( "bitsort",
for(i = 0; i < CNT; ++i)
set1(rand() % MAX, vector2));

set1函数是这样的:

void set1(int pos, char* vector)        /* set the position to 1 */
{
vector[pos/8] |= (0x1 << pos%8);
}

当我执行程序时,输出看起来像这样......

bitsort                -36035411302143896

即使我像这样将差异转换为 unsigned int,它仍然不起作用:

#define TIMER(txt, process)                     \
starttime = clock(); \
process; \
endtime = clock(); \
printf("%-20s %20d\n", \
txt, (unsigned int)(endtime - starttime))

输出是bitsort -16766097

我试图将 %ld 修改为 %d,但它不起作用。

但是如果我不在参数中使用for,像这样:

TIMER("bitsort", set1(rand() % MAX,vector2));

TIMER 工作完美,给了我一个合理的结果..

有人知道我的代码有什么问题吗?是宏引起的还是clock()函数引起的?谢谢!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com