小编Fed*_*oni的帖子

是否有一种优雅且快速的方法来测试整数中的 1 位是否在连续区域中?

我需要测试位值为 1 的位置(对于 32 位整数从 0 到 31)是否形成连续区域。例如:

00111111000000000000000000000000      is contiguous
00111111000000000000000011000000      is not contiguous
Run Code Online (Sandbox Code Playgroud)

我希望这个测试,即一些功能has_contiguous_one_bits(int),是可移植的。

一个明显的方法是遍历位置以找到第一个设置位,然后是第一个未设置位并检查是否有更多设置位。

我想知道是否存在更快的方法?如果有找到最高和最低设置位的快速方法(但从这个问题看来没有任何可移植的),那么可能的实现是

bool has_contiguous_one_bits(int val)
{
    auto h = highest_set_bit(val);
    auto l = lowest_set_bit(val);
    return val == (((1 << (h-l+1))-1)<<l);
}
Run Code Online (Sandbox Code Playgroud)

只是为了好玩,这里是前 100 个具有连续位的整数:

0 1 2 3 4 6 7 8 12 14 15 16 24 28 30 31 32 48 56 60 62 63 64 96 112 120 124 126 127 128 192 224 240 248 252 254 …
Run Code Online (Sandbox Code Playgroud)

c c++ bit-manipulation

84
推荐指数
7
解决办法
5120
查看次数

为什么常见的C编译器在输出中包含源文件名?

我从得知这个最近的答案gccclang包括源文件名某处二进制作为元数据,调试未启用时也是如此.

我真的不明白为什么这应该是一个好主意.除了微小的隐私风险之外,当优化结果二进制(-Os)的大小时,这也会发生,这看起来效率低下.

为什么编译器包含这些信息?

gcc compilation clang compiler-optimization compiler-options

9
推荐指数
2
解决办法
829
查看次数

自动管理源文件中的许可证/作者/版本标头

通常认为将一些包含作者,版本和许可证信息的行添加到源文件的顶部是一种好习惯.例如,Gnu GPL v3建议添加

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year>  <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms [SNIP]
Run Code Online (Sandbox Code Playgroud)

我觉得将它手动添加到每个文件并且不得不一直更新所有这些信息(新作者,版权年份,版本颠簸)时都很繁琐.

有没有办法自动管理这个,所以我只需要在一个地方编辑这些东西,它就会被自动复制?

如果需要,您可以假设我正在使用任何现代版本控制系统.

version-control licensing

7
推荐指数
2
解决办法
2723
查看次数

"全球可能效率很低"

global在一个if命令中使用(在Matlab中)一个语句,所以我只有在真正需要时才将全局变量导入本地命名空间.

代码分析器警告我" global除非它是函数中的顶级语句,否则效率可能非常低".考虑到可能的内部实现,我发现这个限制非常奇怪和不寻常.我在考虑两种可能性:

  1. 这个警告的真正含义是" global它本身效率很低,所以不要在循环中使用它".特别是,在if中使用它,就像我正在做的那样,非常安全,而且警告发出错误(措辞不当)

  2. 警告是正确的; Matlab在后台使用了一些非常不寻常的变量加载机制,因此在if语句中导入全局变量要慢得多.在这种情况下,我想要提示或指示这些东西是如何工作的,因为我感兴趣,如果我想在将来编写有效的代码,这似乎很重要.

这两种解释中哪一项是正确的?(或者两者都不是?)

提前致谢.

编辑:更清楚:我知道这global很慢(显然我不能避免使用它,因为它是我正在使用的旧库的设计决定); 我问的是为什么Matlab代码分析器会抱怨

if(foo==bar)
    GLOBAL baz
    baz=1;
else
    do_other_stuff;
end
Run Code Online (Sandbox Code Playgroud)

但不是

GLOBAL baz
if(foo==bar)
    baz=1;
else
    do_other_stuff;
end
Run Code Online (Sandbox Code Playgroud)

我发现很难想象第一个应该比第二个慢的原因.

performance matlab global-variables

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

`git difftool`和名称文件中的witespaces

似乎在git difftool执行外部命令时,它不会正确引用参数.

如果.gitconfig包含以下行:

[difftool.echo]
  cmd = echo "$LOCAL" "$REMOTE"
Run Code Online (Sandbox Code Playgroud)

当我尝试difftool使用包含空格的路径运行时,例如

> git difftool -t echo HEAD^ HEAD spaces\ here/test.txt
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

/tmp/RL2Nyi_test.txt spaces here/test.txt
Run Code Online (Sandbox Code Playgroud)

如您所见,文件名未被引用(尽管命令中有明确的引号),因此参数解析失败.删除引号.gitconfig(编辑:以及将它们转义为\")不会改变结果.

(通过替换echo任何diff程序,您将获得更有意义的用例).

如何获得正确转义的文件名?

git whitespace path

6
推荐指数
1
解决办法
589
查看次数

使用CSS设置`tt`样式

我正在使用包含许多tt标签的机器生成的HTML文件.我尝试了几种方式来设计它们,但到目前为止还没有任何方法对我有效:例如,

<html>
 <head>
  <style type="text/css">
   .a {color:red;}
  </style>
 </head>
 <body>
  <p><tt class="a">this should be red</tt></p>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

不呈现为红色(至少在FF 6.0.1/Ubuntu中).

我做错了什么,或者tt不支持样式标签?

html css

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