Visual c++ 在Windows中用C计算百分比

Visual c++ 在Windows中用C计算百分比,visual-c++,gcc,percentage,Visual C++,Gcc,Percentage,我有以下代码行来计算计数/总数的百分比 微软Visual C++ 2005 printf("Count = %lu (%.2lf%%)\n", count, (double)count/(double)total*100.0); 在gcc中 printf("Count = %lu (%.2lf\%)\n", count, (double)count/(double)total*100.0); “count”和“total”都是无符号64位整数。由于某种原因,我能够在GCC中得到正确的值,但

我有以下代码行来计算计数/总数的百分比

微软Visual C++ 2005

printf("Count = %lu (%.2lf%%)\n", count, (double)count/(double)total*100.0);
在gcc中

printf("Count = %lu (%.2lf\%)\n", count, (double)count/(double)total*100.0);
“count”和“total”都是无符号64位整数。由于某种原因,我能够在GCC中得到正确的值,但是在Visual C++中总是得到0%。
为什么我不能在Windows中获得正确的值?

%lu
打印一个无符号的
长整数。在VisualC++中,这是32位整数,不是64位整数。您说过“count”是一个64位整数,所以它不是一个“long int”。(您必须声明它为“代码> >×64”计数;< />代码>或“代码>长long int计数;< /C> >,对吗?否则,您将在VisualC++ 2005中声明64位整型变量< /P>
由于
printf
不知道您传递了什么参数,也不知道它们有多大,因此它依赖于格式字符串来告诉它每个参数要从堆栈中提取多少字节的数据。通过写入
%lu
,您告诉它为“count”删除4个字节(32位)的数据,但当您将64位整数变量“count”传递给
printf
时,您传递了8个字节(64位)的数据。这使得堆栈上仍然有4个字节。然后,当
printf
删除百分比“double”的8个字节(64位)时,它首先从“count”中剩下4个字节。由于Intel x86 CPU是小端,因此几乎可以肯定这些字节是00000000

<> >简短回答:在VisualC++中编写<代码> %I64 U/<代码>或%LLU>代码>打印无符号64位值。