相关疑难解决方法(0)

Linux内核中可能/不太可能的宏如何工作以及它们的好处是什么?

我一直在挖掘Linux内核的某些部分,发现这样的调用:

if (unlikely(fd < 0))
{
    /* Do something */
}
Run Code Online (Sandbox Code Playgroud)

要么

if (likely(!err))
{
    /* Do something */
}
Run Code Online (Sandbox Code Playgroud)

我找到了它们的定义:

#define likely(x)       __builtin_expect((x),1)
#define unlikely(x)     __builtin_expect((x),0)
Run Code Online (Sandbox Code Playgroud)

我知道它们是为了优化,但它们是如何工作的?使用它们可以预期性能/尺寸减少多少?至少在瓶颈代码中(当然在用户空间中)是否值得麻烦(并且可能失去可移植性).

linux gcc linux-kernel likely-unlikely

331
推荐指数
6
解决办法
13万
查看次数

如何确定C中整数的位数?

例如,

n = 3432, result 4

n = 45, result 2

n = 33215, result 5

n = -357, result 3
Run Code Online (Sandbox Code Playgroud)

我想我可以把它变成一个字符串然后得到字符串的长度,但这看起来很复杂和黑客.

c math

64
推荐指数
11
解决办法
7万
查看次数

用典型的美元金额格式表示数值

我有一个存储金额的数据框,看起来像这样

> a
  cost
1 1e+05
2 2e+05
Run Code Online (Sandbox Code Playgroud)

我希望它可以这样显示

> a  
  cost
1 $100,000
2 $200,000
Run Code Online (Sandbox Code Playgroud)

如何在R中做到这一点?

r

29
推荐指数
3
解决办法
2万
查看次数

人类可读数字

是否有一种简单的方法和动态的方式来将字符串中的数字格式化为人类可读的?例如10000000000转入10,000,000,000.我已经看到了这个问题,但答案已经过时并且已经过时(示例中的答案).

human-readable rust

6
推荐指数
2
解决办法
447
查看次数

C 中的数字分隔符

'到目前为止,我已经能够在我的 C 项目中使用数字分隔符。它们都已经用MSVC编译器编译过了,没有任何问题。

我刚刚改为使用 GCC 编译器,它不允许这些数字分隔符,并且当我使用它们时会抛出错误。我认为原因是因为 Visual Studio 对 C 和 C++ 使用相同的编译器,并且在 C++14 中(我相信),'允许使用数字分隔符。

如果是这种情况,GCC 中是否有可用的数字分隔符?当使用二进制的 64 位寄存器值时,这些分隔符确实很有帮助......

c gcc

6
推荐指数
2
解决办法
4383
查看次数

在C的printf中进行数字分组

我希望用千位分隔符(逗号或空格)输出大数字 - 基本上与如何在3位分组中显示数字printf在C中使用(GNU,99)相同.

如果printf本身不支持数字分组,我怎么能用类似的东西来实现printf("%s", group_digits(number))呢?

它必须支持负整数,最好还有浮点数.

c printf grouping digit

5
推荐指数
1
解决办法
9000
查看次数

如何在Windows上的C语言中为双精度数添加千位分隔符?

我使用MPFR库对大数字进行计算,但也返回小数点后8位数字的双精度数。

我将数字mpfr_sprintf转换为char数组,以确保精度或任何功能都不会丢失。一切都很好,除了我在文档中没有找到任何千位分隔符选项(否则我错过了)。

给定一个诸如20043.95381376之类的数字,我希望将其表示为20,043.95381376,以提高可读性。

或数字164992818.48075795164,992,818.48075795

我读到有关应加到printf / sprintf中的撇号,但这似乎是UNIX / POSIX,并且我是Windows用户。

由于在内部我将数字打印为字符串,所以我认为我可以做的是编写一个自定义实现,该实现将根据数字自动添加逗号(> 1000> 10000> 100000,依此类推),但随后我意识到像strncpy这样的函数或strcpy将基本上替换,而不是将逗号添加到所需位置。这就是我回到如何做的第一件事。

我该怎么做?

c windows double separator

5
推荐指数
1
解决办法
2278
查看次数

如何用C中的逗号格式化货币?

我希望将Long Float格式化为C中的货币.我想在开头放置一个美元符号,逗号在十进制之前迭代每三位数,并在十进制之前放置一个点.到目前为止,我一直在打印这样的数字:

printf("You are owed $%.2Lf!\n", money);

它返回了类似的东西

You are owed $123456789.00!

数字看起来应该是这样的

$123,456,789.00
$1,234.56
$123.45

任何答案都不需要在实际代码中.你没有勺子喂食.如果有与c相关的细节会有所帮助,请提及.其他伪代码也没问题.

谢谢.

c formatting

4
推荐指数
1
解决办法
2万
查看次数

在 C 中打印带有逗号的浮点数

可能的重复:
将 1000000 输出为 1,000,000 等等

我有一个格式为 xxxxxxxx.xx 的浮点变量(例如 11526.99)。我想将其打印为 11,562.99,并带有逗号。C语言中如何插入逗号?

c floating-point floating-point-conversion

0
推荐指数
1
解决办法
2万
查看次数