【发布时间】:2019-08-21 02:00:32
【问题描述】:
我正在尝试最大限度地优化低级子程序,但我无法找出在这种特定情况下翻转位的最快方法:
给定一个二进制整数n,其中所有设置位都在所有清除位的左侧(例如11110000、110000、1110000),是否有可能产生一个数字长度为@的二进制整数987654325@,设置所有偶数位并清除所有奇数位?
例子:
n = 111000, answer: 10
n = 1111000, answer: 1010
n = 110, answer: 0
n = 111110000000, answer: 101010
n = 1111111111000000000, answer: 1010101010101010
n 保证至少有 2 个set bits,并且至少有 (set bits - 1) clear bits
答案必须仅使用恒定数量的位操作和/或算术运算(即无循环),并且不能使用任何类型转换(仅整数,无字符串)。
【问题讨论】:
-
您的子程序的实际目的是什么?为什么要限制所有这些?描述读起来像家庭作业问题。
-
允许的操作集到底是什么?像 popcnt、lzcnt、pext 等“高级”的东西? (E:没有它们是可能的,但它会变得有点毛茸茸)
-
@lurker 我正在设计一种算法来生成大小为
n的所有可能排列的二叉树,其中k的不同值的数量。这是其中的一小部分。我猜这听起来很学术,但它确实有实际应用。我不是学生。 -
n应该至少有 1 个清除位吗? -
“我正在尝试最大限度地优化低级子例程”未演示。发布您尝试过的其他内容,这只是请求其他人完成工作。
标签: python c++ c bit-manipulation bitwise-operators