- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设 x
是一个位掩码(即除 1 之外的所有位均为 0)并且 y
是位掩码或等于 0。我需要一点技巧才能返回 x
如果y
非零,如果 y
则返回零为零。
这是一种可能的解决方案:取 x
的以 2 为底的对数和 y
(使用 de Bruijn 序列)并减去它们,将值存储在 d
中.那么y << d
将返回 x
除非y
一开始是零。
这种方法有两个问题:1) if y
为零,从技术上讲,以 2 为底的对数是未定义的。不确定这是否重要,因为即使 d
是一些垃圾值,y << d
如果 y
仍应返回零为零; 2) 如果d
是负数,右移运算符不会变成左移运算符(根据 Google 搜索),这意味着我必须包括一些符号检查。
我相信有一种更简单的方法,但我找不到它,非常感谢您的帮助。
编辑:澄清一下,我正在寻找最快的方法来做到这一点。显而易见的if (y == 0) return 0; else return x
使用 if
语句,因此受到分支预测的不利影响,这就是为什么我要求助于复杂的 base-2 日志解决方案。
最佳答案
在大多数常见的处理器架构上,最好使用三元运算符:
/* if y != 0, return x, else return 0 */
int select1 (int x, int y)
{
return y ? x : 0;
}
三元运算符的使用通常不涉及现代处理器架构上分支的使用,因为它可以通过使用条件移动(例如在 x86 上)、指令预测(例如在 ARM 上)或选择指令(例如在某些 GPU 上)。
如果不希望或不允许使用三元运算符,并且需要一种复杂的解决方案,则可以(假设平台对整数使用二进制补码表示)使用:
/* if y != 0, return x, else return 0 */
int select2 (int x, int y)
{
return (0 - (y != 0)) & x;
}
请注意,select2()
可能比 select1()
慢。示例:如果我为 x86-64 架构编译上述函数,我的编译器会为 select1()
test edx, edx
cmovne edx, ecx
mov eax, edx
ret
但是 select2()
的这个较长的指令序列:
mov r8d, 1
test edx, edx
cmovne edx, r8d
neg edx
and edx, ecx
mov eax, edx
ret
请注意,这两个指令序列都没有将分支作为值选择的一部分,但是与指令序列相比,select2()
中的指令序列需要执行更多的指令,并且具有更长的依赖链在 select1()
中。
关于c++ - Bit hack 根据第二个值返回两个值之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36241827/
我希望在我的页面上使用一些吸引眼球的实验性 CSS,例如 border-radius(圆 Angular )和渐变。不幸的是,Internet Explorer 还不支持任何这些。至少 border-
我不喜欢微软的字体渲染。 我为客户创建了一个站点,我的调试列表中最后一个未选中的框是最大的。 (顺便说一句,它还没有“上线”,所以请忽略任何其他错误 - http://baked-beans.tv/b
一般情况下,当我们想在同一页面显示某个网页的内容时,我们会使用ajax请求。如果说,我使用 AJAX 请求不同域中的网页,由于跨端脚本错误,这是不允许的。但是为什么允许通过服务器端页面访问。例如我们可
在我的 css 代码中,我有一些 hack,我想影响 IE6/7 #topmenu li a.activa, #topmenu li a.activa:hover{ *background:
在过去的两个月里,我一直在试图“愚弄”safari,让它认为它正在查看服务器上的一个文件,这实际上是来自摄像机的实时视频流,根据请求使用 Gstreamer 编码和混合成一种格式这是浏览器支持的。由于
怎么说呢,相信很多考过竞赛的同学都会在平时的练习/考试中遭遇过100分但没有AC的情况,结果一看评测结果:subtask的数据点没过! 这时候就是遇到hack数据了,如果被这类数据卡住,说明你
Avast 不时出现在我的一个网站上。有点奇怪,因为我对安全性非常严格,但我检查了 index.php 文件和所有相关的包含和脚本。在我删除的“header.php”文件中发现了一些奇怪的 PHP 代
所以我使用一个程序,我在 lua 中编写 mods,lua 处于沙箱状态,这意味着大多数功能都被阻止,如 IO 和 OS,我什至不能使用 REQUIRE 添加库。我需要一个功能来解压缩我的一个 mod
在 Wiki page for Sudoku solutions ,一种解决方案声称使用“Dot Hack”。链接的 Github 页面不再可用,我在别处找不到任何关于它的信息。 这是关于什么的?它有
嗨, friend 们,是否有可能获得像这样 100% 宽度和高度的双色背景 这是示例图像: Sample Image http://www.mediaserveit.com/demo/vivek/r
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我有一个网站使用来自谷歌字体的自定义字体。在我的网站上它是正常对齐的,但在我的 android 上,源不对齐。通过各种移动技巧进行研究,我想知道它们是否真的有效,因为经过一项一项的测试,它并没有奏效。
我正在使用... background:url(menu-bg.png) repeat-x, url(spot.gif) repeat; background:url(spot.gif)\0/; 在
我尝试隐藏/显示 div“游戏类型”,但如果输入复选框在列表项中,则以下代码不会运行,我不明白为什么 是否可以在不使用 js 的情况下使用“no-game”输入禁用“pc”和“xbox”输入? inp
简单的问题:我正在 HTML5/Socket.io 中构建一个多人游戏,并使用 Phaser 作为游戏框架。我现在已经进入了为黑客行为添加预防措施的阶段了。 基本上我的问题很简单:潜在的黑客是否可以实
是否有任何方法(hack)插入 Python 函数(def)通过引用返回结果,即使对于不可变类型也是如此? 提案申请(swap as subroutine): def swap(a, b): ....
谁能帮我解决这个问题。我是 css 样式的新手。我有一个 css 文件,其中包含我要构建的 asp.net 网站的所有样式。然而,它在安装了 IE 7 的服务器上运行良好,当我尝试使用 chrome、
以下制作可变大小结构的方法有什么问题? struct tode{ int g; int *p; }; struct tode *lp = malloc(sizeof
我已经停止为不同的浏览器使用 CSS hack,而是支持“条件注释将类添加到 html 标记”方法。 这让我想到了我的问题。我如何编写这个 ie8 hack 没有 hack? .grab-cursor
这样的闭包实现有什么问题吗(从python hack中偷来的)? void function(int value) { struct closure { closure(int
我是一名优秀的程序员,十分优秀!