宏是这样的:
#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()
函数引起的?谢谢!
答案 0 :(得分:2)
我找到了你的问题:
请查看此文档http://www.cplusplus.com/reference/clibrary/cstdio/printf/
注意有关%d和%i的事情? 签名十进制整数
你必须使用%u或%lu,因为clock_t是无符号的,而unsigned int显然也是无符号的。
编辑:这只是问题的一半,另一半是他在