我一直在挖掘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)
我知道它们是为了优化,但它们是如何工作的?使用它们可以预期性能/尺寸减少多少?至少在瓶颈代码中(当然在用户空间中)是否值得麻烦(并且可能失去可移植性).
例如,
n = 3432, result 4
n = 45, result 2
n = 33215, result 5
n = -357, result 3
Run Code Online (Sandbox Code Playgroud)
我想我可以把它变成一个字符串然后得到字符串的长度,但这看起来很复杂和黑客.
我有一个存储金额的数据框,看起来像这样
> 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中做到这一点?
是否有一种简单的方法和动态的方式来将字符串中的数字格式化为人类可读的?例如10000000000转入10,000,000,000.我已经看到了这个问题,但答案已经过时并且已经过时(示例中的答案).
'到目前为止,我已经能够在我的 C 项目中使用数字分隔符。它们都已经用MSVC编译器编译过了,没有任何问题。
我刚刚改为使用 GCC 编译器,它不允许这些数字分隔符,并且当我使用它们时会抛出错误。我认为原因是因为 Visual Studio 对 C 和 C++ 使用相同的编译器,并且在 C++14 中(我相信),'允许使用数字分隔符。
如果是这种情况,GCC 中是否有可用的数字分隔符?当使用二进制的 64 位寄存器值时,这些分隔符确实很有帮助......
我希望用千位分隔符(逗号或空格)输出大数字 - 基本上与如何在3位分组中显示数字但printf在C中使用(GNU,99)相同.
如果printf本身不支持数字分组,我怎么能用类似的东西来实现printf("%s", group_digits(number))呢?
它必须支持负整数,最好还有浮点数.
我使用MPFR库对大数字进行计算,但也返回小数点后8位数字的双精度数。
我将数字mpfr_sprintf转换为char数组,以确保精度或任何功能都不会丢失。一切都很好,除了我在文档中没有找到任何千位分隔符选项(否则我错过了)。
给定一个诸如20043.95381376之类的数字,我希望将其表示为20,043.95381376,以提高可读性。
或数字164992818.48075795为164,992,818.48075795
我读到有关应加到printf / sprintf中的撇号,但这似乎是UNIX / POSIX,并且我是Windows用户。
由于在内部我将数字打印为字符串,所以我认为我可以做的是编写一个自定义实现,该实现将根据数字自动添加逗号(> 1000> 10000> 100000,依此类推),但随后我意识到像strncpy这样的函数或strcpy将基本上替换,而不是将逗号添加到所需位置。这就是我回到如何做的第一件事。
我该怎么做?
我希望将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相关的细节会有所帮助,请提及.其他伪代码也没问题.
谢谢.
可能的重复:
将 1000000 输出为 1,000,000 等等
我有一个格式为 xxxxxxxx.xx 的浮点变量(例如 11526.99)。我想将其打印为 11,562.99,并带有逗号。C语言中如何插入逗号?