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

标签 visual-c++ gcc percentage

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

在 Microsoft Visual C++ 2005 中

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

在海湾合作委员会

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

“count”和“total”都是无符号的 64 位整数。由于某种原因,我能够在 gcc 中获得正确的值,但在 Visual C++ 中始终获得 0.00%。

为什么我在 Windows 中无法获取正确的值?

最佳答案

%lu 打印一个无符号的long int。在 Visual C++ 中,这是一个 32 位整数,而不是 64 位整数。你说“count”是一个64位整数,所以它不是一个“long int”。 (您必须将其声明为 __int64 count;long long int count;,对吧?否则您将如何在 Visual C++ 2005 中声明 64 位整型变量?)

由于 printf 不知道您传递了哪些参数或它们有多大,因此它依赖格式字符串来告诉它要为每个参数从堆栈中提取多少字节的数据。通过编写 %lu,您已经告诉它为“count”删除 4 个字节(32 位)的数据,但是当您传递 64 位时,您传递了 8 个字节(64 位)的数据整数变量“count”到printf。这使得堆栈上还剩下 4 个字节。然后,当 printf 去删除“double”的 8 个字节(64 位)作为百分比时,它首先会从“count”中剩下 4 个字节。由于 Intel x86 CPU 是小端字节序,因此这些字节几乎肯定是 00000000。

简短回答:编写 %I64u%llu 在 Visual C++ 中打印无符号 64 位值。

关于visual-c++ - 在 Windows 中用 C 计算百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16096879/

相关文章:

c - 无法编译 ecepass.c

graph - SAS 条形图测量不同变量的百分比(一个变量在 y 轴上测量,另一个通过条内的阴影显示)

c++ - 如何比较 strstr(LPCWSTR, CHAR*);

c - 使用microsoft Visual C++ 2008调试C程序

windows - 在不更改代码的情况下将 C++ 输出流重定向到 VS 2010 中的文件?

css - chrome 和 IE 中的边距百分比问题

html - CSS PX 到百分比

c++ - 使用 Visual C++ 2008 时如何解决未处理的异常错误?

gcc - ICC 与 GCC - 优化和 CPU 架构

C++ lambda : Access static method in lambda leads to error 'this was not captured for this lambda function'