按位否定直到第一个正位

时间:2018-04-13 14:32:17

标签: labview

我在一个项目中工作,我不能使用U32位(无符号32位)的按位否定,因为当我尝试使用否定运算符时,例如我有1和否定(根据此函数)是U32最大的数字,我预计零。我的想法是使用二进制数,如(110010),我只需要在第一个1位(001101)之后取消位。在LabVIEW中有一种方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:1)

这会计算您要查找的值。

  • 1110 - > 0001(又名,1)
  • 1010 - > 0101(又名,101)
  • 111 - > 000(又名,0)[事实上,所有模式都是" 1"将成为0]
  • 0 - > 0 [因为没有比特可以否定...也许你想要特殊情况这是" 1"?)

注意:这是一个VI Snippet。将.png文件保存到磁盘,然后将操作系统中的图像拖到LabVIEW中,它将生成框图(我在LV 2016中编写,因此适用于2016或更高版本)。有时直接从浏览器拖动到图表工作,但大多数浏览器似乎剥离了使其工作的EXIF数据。

enter image description here

答案 1 :(得分:0)

这是一个没有循环的替代解决方案。它将输入格式化为其字符串表示(不带前导零)以确定要取消多少位 - 调用此n - 然后使用2^n - 1进行XOR输入。

请注意,对于1的输入,此版本将返回0的输出。

使用字符串函数感觉有点hacky ......但它不使用循环!!

solution VI snippet

显然我们可以尝试使用其base-2日志来获取输入的“位长”,但我没有坐下来确定如何正确确保输入只有输入时没有舍入问题它最重要的位集,因此base-2 log应该是一个整数,但可能会小一些。

答案 2 :(得分:0)

这里是一个没有字符串/循环的解决方案,使用转换为float(计算floor(log_2(x))的常用方法)。这不会对无符号类型起作用。

enter image description here