按位取反直到第一个正位
Bitwise negation up to the first positive bit
我在一个项目中工作,我不能使用 U32 位(无符号 32 位)的按位取反,因为当我尝试使用取反运算符时,例如我有 1 和取反(根据这个函数)是 U32 可能的最大数字,我预计是零。我的想法是使用像 (110010) 这样的二进制数,我只需要取反第一个 1 位 (001101) 之后的位。在 LabVIEW 中有办法做到这一点吗?
这会计算出您要查找的值。
- 1110 --> 0001(又名 1)
- 1010 --> 0101(又名 101)
- 111 --> 000(又名,0)[事实上,所有全为“1”的模式都将变为 0]
- 0 --> 0 [因为没有要取反的位...也许您想将其作为“1”的特殊情况?)
注意:这是一个 VI 代码段。将 .png 文件保存到您的磁盘,然后将图像从 OS 拖到 LabVIEW 中,它将生成框图(我在 LV 2016 中编写它,因此适用于 2016 年或更高版本)。有时直接从浏览器拖动到图表是可行的,但大多数浏览器似乎会删除使其有效的 EXIF 数据。
这是一个没有循环的替代解决方案。它将输入格式化为它的字符串表示形式(没有前导零)以计算出要取反的位数 - 称之为 n
- 然后将输入与 2^n - 1
.
进行异或运算
请注意,此版本将 return 输出 1
,输入 0
。
使用字符串函数感觉有点老套...但它不使用循环!!
显然我们可以尝试使用其 base-2 日志获取输入的 'bit length',但我还没有坐下来研究如何正确确保在输入仅设置了最高有效位,因此以 2 为底的对数应该正好是一个整数,但结果可能会小一些。
这是一个没有 strings/loops 的解决方案,使用转换为浮点数(计算 floor(log_2(x))
的常用方法)。这不适用于无符号类型。
我在一个项目中工作,我不能使用 U32 位(无符号 32 位)的按位取反,因为当我尝试使用取反运算符时,例如我有 1 和取反(根据这个函数)是 U32 可能的最大数字,我预计是零。我的想法是使用像 (110010) 这样的二进制数,我只需要取反第一个 1 位 (001101) 之后的位。在 LabVIEW 中有办法做到这一点吗?
这会计算出您要查找的值。
- 1110 --> 0001(又名 1)
- 1010 --> 0101(又名 101)
- 111 --> 000(又名,0)[事实上,所有全为“1”的模式都将变为 0]
- 0 --> 0 [因为没有要取反的位...也许您想将其作为“1”的特殊情况?)
注意:这是一个 VI 代码段。将 .png 文件保存到您的磁盘,然后将图像从 OS 拖到 LabVIEW 中,它将生成框图(我在 LV 2016 中编写它,因此适用于 2016 年或更高版本)。有时直接从浏览器拖动到图表是可行的,但大多数浏览器似乎会删除使其有效的 EXIF 数据。
这是一个没有循环的替代解决方案。它将输入格式化为它的字符串表示形式(没有前导零)以计算出要取反的位数 - 称之为 n
- 然后将输入与 2^n - 1
.
请注意,此版本将 return 输出 1
,输入 0
。
使用字符串函数感觉有点老套...但它不使用循环!!
显然我们可以尝试使用其 base-2 日志获取输入的 'bit length',但我还没有坐下来研究如何正确确保在输入仅设置了最高有效位,因此以 2 为底的对数应该正好是一个整数,但结果可能会小一些。
这是一个没有 strings/loops 的解决方案,使用转换为浮点数(计算 floor(log_2(x))
的常用方法)。这不适用于无符号类型。